Partial deploy with missing node type breaks deploy

This commit is contained in:
Nick O'Leary
2015-03-13 13:15:20 +00:00
parent 4078212089
commit af20f3df64
2 changed files with 56 additions and 40 deletions

View File

@@ -253,6 +253,7 @@ function Flow(config) {
this.activeNodes = {};
this.subflowInstanceNodes = {};
this.catchNodeMap = {};
this.started = false;
this.parseConfig(config);
@@ -273,8 +274,6 @@ Flow.prototype.parseConfig = function(config) {
this.configNodes = {};
this.catchNodeMap = null;
var unknownTypes = {};
for (i=0;i<this.config.length;i++) {
@@ -352,7 +351,16 @@ Flow.prototype.parseConfig = function(config) {
this.missingTypes = Object.keys(unknownTypes);
}
Flow.prototype.start = function() {
Flow.prototype.start = function(configDiff) {
if (configDiff) {
for (var i=0;i<configDiff.rewire.length;i++) {
var node = flow.activeNodes[configDiff.rewire[i]];
if (node) {
node.updateWires(flow.allNodes[node.id].wires);
}
}
}
this.started = true;
if (this.missingTypes.length > 0) {
throw new Error("missing types");
@@ -402,8 +410,14 @@ Flow.prototype.start = function() {
events.emit("nodes-started");
}
Flow.prototype.stop = function(nodeList) {
nodeList = nodeList || Object.keys(this.activeNodes);
Flow.prototype.stop = function(configDiff) {
var nodeList;
if (configDiff) {
nodeList = configDiff.stop;
} else {
nodeList = Object.keys(this.activeNodes);
}
var flow = this;
return when.promise(function(resolve) {
events.emit("nodes-stopping");
@@ -481,15 +495,12 @@ Flow.prototype.applyConfig = function(config,type) {
//}
var nodesToStop = [];
var nodesToCreate = [];
nodesToRewire = diff.wiringChanged;
if (type == "nodes") {
nodesToStop = diff.deleted.concat(diff.changed);
nodesToCreate = diff.changed;
} else if (type == "flows") {
nodesToStop = diff.deleted.concat(diff.changed).concat(diff.linked);
nodesToCreate = diff.changed.concat(diff.linked);
}
for (var i=0;i<nodesToStop.length;i++) {
@@ -503,30 +514,13 @@ Flow.prototype.applyConfig = function(config,type) {
} else {
activeNodesToStop = Object.keys(this.activeNodes);
}
var flow = this;
if (type != "full") {
log.info("Stopping modified "+type);
return {
type: type,
stop: activeNodesToStop,
rewire: nodesToRewire,
config: config
}
return this.stop(activeNodesToStop).then(function() {
if (type != "full") {
log.info("Stopped modified "+type);
}
flow.parseConfig(config);
for (var i=0;i<nodesToRewire.length;i++) {
var node = flow.activeNodes[nodesToRewire[i]];
if (node) {
node.updateWires(flow.allNodes[node.id].wires);
}
}
if (type != "full") {
log.info("Starting modified "+type);
}
flow.start();
if (type != "full") {
log.info("Started modified "+type);
}
})
}
Flow.prototype.diffFlow = function(config) {