From 4e8cdecd1be68c2eca12b6604189602e4ad29b23 Mon Sep 17 00:00:00 2001 From: Girish Ramakrishnan Date: Fri, 20 Jun 2014 23:50:41 -0700 Subject: [PATCH] apptask: Move state handling code to separate function --- src/apptask.js | 136 +++++++++++++++++++++++++------------------------ 1 file changed, 70 insertions(+), 66 deletions(-) diff --git a/src/apptask.js b/src/apptask.js index e37e19a46..5f73a5279 100644 --- a/src/apptask.js +++ b/src/apptask.js @@ -424,6 +424,75 @@ function registerSubdomain(app, callback) { }); } +function processAppState(app, callback) { + switch (app.statusCode) { + case appdb.STATUS_PENDING_INSTALL: + case appdb.STATUS_NGINX_ERROR: + getFreePort(function (error, freePort) { + if (error) return callback(null); + configureNginx(app, freePort, callback); + }); + break; + + case appdb.STATUS_NGINX_CONFIGURED: + case appdb.STATUS_MANIFEST_ERROR: + case appdb.STATUS_DOWNLOAD_ERROR: + case appdb.STATUS_DOWNLOADING_MANIFEST: + downloadManifest(app, callback); + break; + + case appdb.STATUS_DOWNLOADING_IMAGE: + case appdb.STATUS_DOWNLOADED_MANIFEST: + downloadImage(app, callback); + break; + + case appdb.STATUS_DOWNLOADED_IMAGE: + case appdb.STATUS_CREATING_CONTAINER: + case appdb.STATUS_EXITED: + appdb.getPortBindings(app.id, function (error, portBindings) { + if (error) portBindings = [ ]; // TODO: this is probably not good + createContainer(app, portBindings, callback); + }); + break; + + case appdb.STATUS_CREATED_CONTAINER: + case appdb.STATUS_CREATING_VOLUME: + createVolume(app, callback); + break; + + case appdb.STATUS_CREATED_VOLUME: + case appdb.STATUS_STARTING_CONTAINER: + appdb.getPortBindings(app.id, function (error, portBindings) { + if (error) portBindings = [ ]; // TODO: this is probably not good + startContainer(app, portBindings, callback); + }); + break; + + case appdb.STATUS_PENDING_UNINSTALL: + uninstall(app, callback); + break; + + case appdb.STATUS_STARTED_CONTAINER: + case appdb.STATUS_REGISTERING_SUBDOMAIN: + registerSubdomain(app, callback); + break; + + case appdb.STATUS_REGISTERED_SUBDOMAIN: + case appdb.STATUS_RUNNING: + checkAppHealth(app, callback); + break; + + // do nothing: let user retry again + case appdb.STATUS_SUBDOMAIN_ERROR: // TODO: register with threshold + case appdb.STATUS_CONTAINER_ERROR: + case appdb.STATUS_VOLUME_ERROR: + case appdb.STATUS_IMAGE_ERROR: + case appdb.STATUS_DEAD: // TODO: restart DEAD apps with threshold? + callback(null); + break; + } +} + function refresh() { if (refreshing) { debug('Already refreshing, marked as pending'); @@ -442,72 +511,7 @@ function refresh() { } async.eachSeries(apps, function iterator(app, callback) { - switch (app.statusCode) { - case appdb.STATUS_PENDING_INSTALL: - case appdb.STATUS_NGINX_ERROR: - getFreePort(function (error, freePort) { - if (error) return callback(null); - configureNginx(app, freePort, callback); - }); - break; - - case appdb.STATUS_NGINX_CONFIGURED: - case appdb.STATUS_MANIFEST_ERROR: - case appdb.STATUS_DOWNLOAD_ERROR: - case appdb.STATUS_DOWNLOADING_MANIFEST: - downloadManifest(app, callback); - break; - - case appdb.STATUS_DOWNLOADING_IMAGE: - case appdb.STATUS_DOWNLOADED_MANIFEST: - downloadImage(app, callback); - break; - - case appdb.STATUS_DOWNLOADED_IMAGE: - case appdb.STATUS_CREATING_CONTAINER: - case appdb.STATUS_EXITED: - appdb.getPortBindings(app.id, function (error, portBindings) { - if (error) portBindings = [ ]; // TODO: this is probably not good - createContainer(app, portBindings, callback); - }); - break; - - case appdb.STATUS_CREATED_CONTAINER: - case appdb.STATUS_CREATING_VOLUME: - createVolume(app, callback); - break; - - case appdb.STATUS_CREATED_VOLUME: - case appdb.STATUS_STARTING_CONTAINER: - appdb.getPortBindings(app.id, function (error, portBindings) { - if (error) portBindings = [ ]; // TODO: this is probably not good - startContainer(app, portBindings, callback); - }); - break; - - case appdb.STATUS_PENDING_UNINSTALL: - uninstall(app, callback); - break; - - case appdb.STATUS_STARTED_CONTAINER: - case appdb.STATUS_REGISTERING_SUBDOMAIN: - registerSubdomain(app, callback); - break; - - case appdb.STATUS_REGISTERED_SUBDOMAIN: - case appdb.STATUS_RUNNING: - checkAppHealth(app, callback); - break; - - // do nothing: let user retry again - case appdb.STATUS_SUBDOMAIN_ERROR: // TODO: register with threshold - case appdb.STATUS_CONTAINER_ERROR: - case appdb.STATUS_VOLUME_ERROR: - case appdb.STATUS_IMAGE_ERROR: - case appdb.STATUS_DEAD: // TODO: restart DEAD apps with threshold? - callback(null); - break; - } + processAppState(app, callback); }, function callback(err) { refreshing = false; if (pendingRefresh) process.nextTick(refresh);