diff --git a/src/services.js b/src/services.js index 5b527f0e6..6d1d43350 100644 --- a/src/services.js +++ b/src/services.js @@ -534,7 +534,7 @@ function rebuildService(id, callback) { if (id === 'mongodb') return startMongodb({ version: 'none' }, callback); if (id === 'postgresql') return startPostgresql({ version: 'none' }, callback); if (id === 'mysql') return startMysql({ version: 'none' }, callback); - if (id === 'sftp') return sftp.start({ version: 'none' }, serviceConfig, callback); + if (id === 'sftp') return sftp.rebuild(serviceConfig, { /* options */ }, callback); if (id === 'graphite') return graphite.start({ version: 'none' }, serviceConfig, callback); // nothing to rebuild for now. diff --git a/src/sftp.js b/src/sftp.js index 9c2b7305f..b1303c4ef 100644 --- a/src/sftp.js +++ b/src/sftp.js @@ -2,6 +2,7 @@ exports = module.exports = { start, + rebuild, DEFAULT_MEMORY_LIMIT: 256 * 1024 * 1024 }; @@ -21,13 +22,14 @@ var apps = require('./apps.js'), _ = require('underscore'); var gRebuildInProgress = false; -function rebuild(serviceConfig, callback) { +function rebuild(serviceConfig, options, callback) { assert.strictEqual(typeof serviceConfig, 'object'); + assert.strictEqual(typeof options, 'object'); assert.strictEqual(typeof callback, 'function'); if (gRebuildInProgress) { debug('waiting for other rebuild to finish'); - return setTimeout(function () { rebuild(serviceConfig, callback); }, 5000); + return setTimeout(function () { rebuild(serviceConfig, options, callback); }, 5000); } gRebuildInProgress = true; @@ -39,6 +41,7 @@ function rebuild(serviceConfig, callback) { debug('rebuilding container'); + const force = !!options.force; const tag = infra.images.sftp.tag; const memoryLimit = serviceConfig.memoryLimit || exports.DEFAULT_MEMORY_LIMIT; const memory = system.getMemoryAllocation(memoryLimit); @@ -84,7 +87,7 @@ function rebuild(serviceConfig, callback) { currentDataDirs.sort(function (a, b) { return a.hostDir < b.hostDir ? -1 : 1; }); dataDirs.sort(function (a, b) { return a.hostDir < b.hostDir ? -1 : 1; }); - if (_.isEqual(currentDataDirs, dataDirs)) { + if (!force && _.isEqual(currentDataDirs, dataDirs)) { debug('Skipping rebuild, no changes'); return done(); } @@ -127,5 +130,5 @@ function start(existingInfra, serviceConfig, callback) { assert.strictEqual(typeof serviceConfig, 'object'); assert.strictEqual(typeof callback, 'function'); - rebuild(serviceConfig, callback); + rebuild(serviceConfig, { force: true }, callback); // force rebuild when infra changed }