diff --git a/src/storage/gcs.js b/src/storage/gcs.js index 552375148..ece3d2ef5 100644 --- a/src/storage/gcs.js +++ b/src/storage/gcs.js @@ -115,27 +115,25 @@ function listDir(apiConfig, backupFilePath, batchSize, iteratorCallback, callbac query.maxResults = batchSize; } - async.forever(function listAndDownload(foreverCallback) { - bucket.getFiles(query, function (error, files, nextQuery) { - if (error) return foreverCallback(error); + let done = false; - if (files.length === 0) return foreverCallback(new Error('Done')); + async.whilst(() => !done, function listAndDownload(whilstCallback) { + bucket.getFiles(query, function (error, files, nextQuery) { + if (error) return whilstCallback(error); + + if (files.length === 0) { done = true; return whilstCallback(); } const entries = files.map(function (f) { return { fullPath: f.name }; }); iteratorCallback(entries, function (error) { - if (error) return foreverCallback(error); - if (!nextQuery) return foreverCallback(new Error('Done')); + if (error) return whilstCallback(error); + if (!nextQuery) { done = true; return whilstCallback(); } query = nextQuery; - foreverCallback(); + whilstCallback(); }); }); - }, function (error) { - if (error.message === 'Done') return callback(null); - - callback(error); - }); + }, callback); } function copy(apiConfig, oldFilePath, newFilePath) { diff --git a/src/storage/noop.js b/src/storage/noop.js index bb5073793..988c06f44 100644 --- a/src/storage/noop.js +++ b/src/storage/noop.js @@ -17,6 +17,7 @@ exports = module.exports = { }; var assert = require('assert'), + BoxError = require('../boxerror.js'), debug = require('debug')('box:storage/noop'), EventEmitter = require('events'); @@ -38,7 +39,7 @@ function download(apiConfig, backupFilePath, callback) { debug('download: %s', backupFilePath); - callback(new Error('Cannot download from noop backend')); + callback(new BoxError(BoxError.NOT_IMPLEMENTED, 'Cannot download from noop backend')); } function listDir(apiConfig, dir, batchSize, iteratorCallback, callback) { @@ -60,7 +61,7 @@ function downloadDir(apiConfig, backupFilePath, destDir) { process.nextTick(function () { debug('downloadDir: %s -> %s', backupFilePath, destDir); - events.emit('done', new Error('Cannot download from noop backend')); + events.emit('done', new BoxError(BoxError.NOT_IMPLEMENTED, 'Cannot download from noop backend')); }); return events; } @@ -109,5 +110,6 @@ function removePrivateFields(apiConfig) { return apiConfig; } +// eslint-disable-next-line no-unused-vars function injectPrivateFields(newConfig, currentConfig) { } diff --git a/src/storage/s3.js b/src/storage/s3.js index 80964040e..3da48523e 100644 --- a/src/storage/s3.js +++ b/src/storage/s3.js @@ -161,29 +161,27 @@ function listDir(apiConfig, dir, batchSize, iteratorCallback, callback) { MaxKeys: batchSize }; - async.forever(function listAndDownload(foreverCallback) { - s3.listObjects(listParams, function (error, listData) { - if (error) return foreverCallback(error); + let done = false; - if (listData.Contents.length === 0) return foreverCallback(new Error('Done')); + async.whilst(() => !done, function listAndDownload(whilstCallback) { + s3.listObjects(listParams, function (error, listData) { + if (error) return whilstCallback(error); + + if (listData.Contents.length === 0) { done = true; return whilstCallback(); } const entries = listData.Contents.map(function (c) { return { fullPath: c.Key, size: c.Size }; }); iteratorCallback(entries, function (error) { - if (error) return foreverCallback(error); + if (error) return whilstCallback(error); - if (!listData.IsTruncated) return foreverCallback(new Error('Done')); + if (!listData.IsTruncated) { done = true; return whilstCallback(); } listParams.Marker = listData.Contents[listData.Contents.length - 1].Key; // NextMarker is returned only with delimiter - foreverCallback(); + whilstCallback(); }); }); - }, function (error) { - if (error.message === 'Done') return callback(null); - - callback(error); - }); + }, callback); }); }