apptask: Move state handling code to separate function

This commit is contained in:
Girish Ramakrishnan
2014-06-20 23:50:41 -07:00
parent 362d8bea5f
commit 4e8cdecd1b
+70 -66
View File
@@ -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);