diff --git a/src/sftp.js b/src/sftp.js index 208b12506..3f529f108 100644 --- a/src/sftp.js +++ b/src/sftp.js @@ -22,17 +22,30 @@ function startSftp(existingInfra, callback) { rebuild(callback); } +var rebuildInProgress = false; function rebuild(callback) { assert.strictEqual(typeof options, 'object'); assert.strictEqual(typeof callback, 'function'); + if (rebuildInProgress) { + debug('waiting for other rebuild to finish'); + return setTimeout(function () { rebuild(callback); }, 5000); + } + + rebuildInProgress = true; + + function done(error) { + rebuildInProgress = false; + callback(error); + } + debug('rebuilding container'); const tag = infra.images.sftp.tag; const memoryLimit = 256; apps.getAll(function (error, result) { - if (error) return callback(error); + if (error) return done(error); let dataDirs = []; result.forEach(function (app) { @@ -73,6 +86,6 @@ function rebuild(callback) { shell.exec.bind(null, 'stopSftp', 'docker stop sftp || true'), shell.exec.bind(null, 'removeSftp', 'docker rm -f sftp || true'), shell.exec.bind(null, 'startSftp', cmd) - ], callback); + ], done); }); }