diff --git a/src/backupformat/tgz.js b/src/backupformat/tgz.js index cef1488c0..d0dd42a7c 100644 --- a/src/backupformat/tgz.js +++ b/src/backupformat/tgz.js @@ -29,10 +29,9 @@ function getBackupFilePath(backupConfig, remotePath) { return path.join(rootPath, remotePath + fileType); } -function tarPack(dataLayout, encryption, callback) { +function tarPack(dataLayout, encryption) { assert(dataLayout instanceof DataLayout, 'dataLayout must be a DataLayout'); assert.strictEqual(typeof encryption, 'object'); - assert.strictEqual(typeof callback, 'function'); const pack = tar.pack('/', { dereference: false, // pack the symlink and not what it points to @@ -76,14 +75,13 @@ function tarPack(dataLayout, encryption, callback) { pack.pipe(gzip).pipe(ps); } - return callback(null, ps); + return ps; } -function tarExtract(inStream, dataLayout, encryption, callback) { +function tarExtract(inStream, dataLayout, encryption) { assert.strictEqual(typeof inStream, 'object'); assert(dataLayout instanceof DataLayout, 'dataLayout must be a DataLayout'); assert.strictEqual(typeof encryption, 'object'); - assert.strictEqual(typeof callback, 'function'); const gunzip = zlib.createGunzip({}); const ps = progressStream({ time: 10000 }); // display a progress every 10 seconds @@ -122,7 +120,7 @@ function tarExtract(inStream, dataLayout, encryption, callback) { }); if (encryption) { - let decrypt = new DecryptStream(encryption); + const decrypt = new DecryptStream(encryption); decrypt.on('error', function (error) { debug('tarExtract: decrypt stream error.', error); emitError(new BoxError(BoxError.EXTERNAL_ERROR, `Failed to decrypt: ${error.message}`)); @@ -132,7 +130,7 @@ function tarExtract(inStream, dataLayout, encryption, callback) { inStream.pipe(ps).pipe(gunzip).pipe(extract); } - callback(null, ps); + return ps; } function download(backupConfig, remotePath, dataLayout, progressCallback, callback) { @@ -152,17 +150,15 @@ function download(backupConfig, remotePath, dataLayout, progressCallback, callba storage.api(backupConfig.provider).download(backupConfig, backupFilePath, function (error, sourceStream) { if (error) return retryCallback(error); - tarExtract(sourceStream, dataLayout, backupConfig.encryption, function (error, ps) { - if (error) return retryCallback(error); + const ps = tarExtract(sourceStream, dataLayout, backupConfig.encryption); - ps.on('progress', function (progress) { - const transferred = Math.round(progress.transferred/1024/1024), speed = Math.round(progress.speed/1024/1024); - if (!transferred && !speed) return progressCallback({ message: 'Downloading backup' }); // 0M@0MBps looks wrong - progressCallback({ message: `Downloading ${transferred}M@${speed}MBps` }); - }); - ps.on('error', retryCallback); - ps.on('done', retryCallback); + ps.on('progress', function (progress) { + const transferred = Math.round(progress.transferred/1024/1024), speed = Math.round(progress.speed/1024/1024); + if (!transferred && !speed) return progressCallback({ message: 'Downloading backup' }); // 0M@0MBps looks wrong + progressCallback({ message: `Downloading ${transferred}M@${speed}MBps` }); }); + ps.on('error', retryCallback); + ps.on('done', retryCallback); }); }, callback); } @@ -177,17 +173,15 @@ function upload(backupConfig, remotePath, dataLayout, progressCallback, callback async.retry({ times: 5, interval: 20000 }, function (retryCallback) { retryCallback = once(retryCallback); // protect again upload() erroring much later after tar stream error - tarPack(dataLayout, backupConfig.encryption, function (error, tarStream) { - if (error) return retryCallback(error); + const tarStream = tarPack(dataLayout, backupConfig.encryption); - tarStream.on('progress', function (progress) { - const transferred = Math.round(progress.transferred/1024/1024), speed = Math.round(progress.speed/1024/1024); - if (!transferred && !speed) return progressCallback({ message: 'Uploading backup' }); // 0M@0MBps looks wrong - progressCallback({ message: `Uploading backup ${transferred}M@${speed}MBps` }); - }); - tarStream.on('error', retryCallback); // already returns BoxError - - storage.api(backupConfig.provider).upload(backupConfig, getBackupFilePath(backupConfig, remotePath), tarStream, retryCallback); + tarStream.on('progress', function (progress) { + const transferred = Math.round(progress.transferred/1024/1024), speed = Math.round(progress.speed/1024/1024); + if (!transferred && !speed) return progressCallback({ message: 'Uploading backup' }); // 0M@0MBps looks wrong + progressCallback({ message: `Uploading backup ${transferred}M@${speed}MBps` }); }); + tarStream.on('error', retryCallback); // already returns BoxError + + storage.api(backupConfig.provider).upload(backupConfig, getBackupFilePath(backupConfig, remotePath), tarStream, retryCallback); }, callback); }