diff --git a/src/cloudron.js b/src/cloudron.js index 25630aa71..edef30c1c 100644 --- a/src/cloudron.js +++ b/src/cloudron.js @@ -102,7 +102,7 @@ function initialize(callback) { assert.strictEqual(typeof callback, 'function'); exports.events.on(exports.EVENT_CONFIGURED, addDnsRecords); - exports.events.on(exports.EVENT_FIRST_RUN, function () { setTimeout(installAppBundle, 30000); }); // wait for 30sec for the addons to start up + exports.events.on(exports.EVENT_FIRST_RUN, installAppBundle); // check activation state for existing cloudrons that do not have first run file // can be removed once cloudrons have been updated diff --git a/src/taskmanager.js b/src/taskmanager.js index c9abec9de..745cd04d9 100644 --- a/src/taskmanager.js +++ b/src/taskmanager.js @@ -24,6 +24,7 @@ var appdb = require('./appdb.js'), var gActiveTasks = { }; var gPendingTasks = [ ]; +var gPlatformReady = false; // PaaS (addons) up and running var TASK_CONCURRENCY = 5; var NOOP_CALLBACK = function (error) { if (error) console.error(error); }; @@ -39,6 +40,11 @@ function initialize(callback) { cloudron.events.on(cloudron.EVENT_CONFIGURED, resumeTasks); } + setTimeout(function () { + gPlatformReady = true; + resumeTasks(); + }, 30000); // wait 30 seconds to signal platform ready + callback(); } @@ -106,6 +112,12 @@ function startAppTask(appId, callback) { return callback(new Error(util.format('Task for %s is already active', appId))); } + if (!gPlatformReady) { + debug('Platform not ready yet, queueing task for %s', appId); + gPendingTasks.push(appId); + return callback(); + } + if (Object.keys(gActiveTasks).length >= TASK_CONCURRENCY) { debug('Reached concurrency limit, queueing task for %s', appId); gPendingTasks.push(appId);