From e8da1b943b62c06205e478d091f179c26cf8c53d Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Mon, 9 Apr 2018 16:42:05 +0200 Subject: [PATCH] fix(xo-server/backups-ng): create all forks at the same time (#2842) Fixes #2790 --- .../src/xo-mixins/backups-ng/index.js | 41 +++++-------------- 1 file changed, 10 insertions(+), 31 deletions(-) diff --git a/packages/xo-server/src/xo-mixins/backups-ng/index.js b/packages/xo-server/src/xo-mixins/backups-ng/index.js index b2e40fe55..96592ae16 100644 --- a/packages/xo-server/src/xo-mixins/backups-ng/index.js +++ b/packages/xo-server/src/xo-mixins/backups-ng/index.js @@ -857,38 +857,17 @@ export default class BackupNg { const streams: any = mapValues( deltaExport.streams, lazyStream => { - let forks = [] - return () => { - if (forks === undefined) { - throw new Error( - 'cannot fork the stream after it has been created' - ) - } - if (forks.length === 0) { - lazyStream().then( - stream => { - // $FlowFixMe - forks.forEach(({ resolve }) => { - const fork: any = stream.pipe(new PassThrough()) - fork.task = stream.task - resolve(fork) - }) - forks = undefined - }, - error => { - // $FlowFixMe - forks.forEach(({ reject }) => { - reject(error) - }) - forks = undefined - } - ) - } - return new Promise((resolve, reject) => { - // $FlowFixMe - forks.push({ reject, resolve }) + const pStream = lazyStream() + const forks = Array.from({ length: nTargets }, _ => { + const promise = pStream.then(stream => { + const fork: any = stream.pipe(new PassThrough()) + fork.task = stream.task + return fork }) - } + promise.catch(noop) // prevent unhandled rejection + return promise + }) + return () => forks.pop() } ) return () => {