azkaban-memoizeit
Changes
src/java/azkaban/execapp/FlowRunner.java 22(+12 -10)
src/web/js/azkaban.jobedit.view.js 19(+15 -4)
Details
diff --git a/src/java/azkaban/execapp/ExecutorServlet.java b/src/java/azkaban/execapp/ExecutorServlet.java
index 00f19a2..282c14c 100644
--- a/src/java/azkaban/execapp/ExecutorServlet.java
+++ b/src/java/azkaban/execapp/ExecutorServlet.java
@@ -201,7 +201,7 @@ public class ExecutorServlet extends HttpServlet implements ConnectorParams {
continue;
}
- if (flow.getUpdateTime() > updateTime) {
+ if (flow.getUpdateTime() >= updateTime) {
updateList.add(flow.toUpdateObject(updateTime));
}
}
src/java/azkaban/execapp/FlowRunner.java 22(+12 -10)
diff --git a/src/java/azkaban/execapp/FlowRunner.java b/src/java/azkaban/execapp/FlowRunner.java
index 35b4afd..5d8b39d 100644
--- a/src/java/azkaban/execapp/FlowRunner.java
+++ b/src/java/azkaban/execapp/FlowRunner.java
@@ -338,15 +338,17 @@ public class FlowRunner extends EventHandler implements Runnable {
logger.info("Finishing up flow. Awaiting Termination");
executorService.shutdown();
- switch(flow.getStatus()) {
- case FAILED_FINISHING:
- logger.info("Setting flow status to Failed.");
- flow.setStatus(Status.FAILED);
- case FAILED:
- case KILLED:
- break;
- default:
- flow.setStatus(Status.SUCCEEDED);
+ synchronized(mainSyncObj) {
+ switch(flow.getStatus()) {
+ case FAILED_FINISHING:
+ logger.info("Setting flow status to Failed.");
+ flow.setStatus(Status.FAILED);
+ case FAILED:
+ case KILLED:
+ break;
+ default:
+ flow.setStatus(Status.SUCCEEDED);
+ }
}
}
@@ -697,7 +699,7 @@ public class FlowRunner extends EventHandler implements Runnable {
ExecutionOptions options = flow.getExecutionOptions();
// The KILLED status occurs when cancel is invoked. We want to keep this
// status even in failure conditions.
- if (flow.getStatus() != Status.KILLED) {
+ if (flow.getStatus() != Status.KILLED && flow.getStatus() != Status.FAILED) {
flow.setStatus(Status.FAILED_FINISHING);
if (options.getFailureAction() == FailureAction.CANCEL_ALL && !flowCancelled) {
logger.info("Flow failed. Failure option is Cancel All. Stopping execution.");
diff --git a/src/java/azkaban/execapp/FlowRunnerManager.java b/src/java/azkaban/execapp/FlowRunnerManager.java
index 79192c0..d4c4d6e 100644
--- a/src/java/azkaban/execapp/FlowRunnerManager.java
+++ b/src/java/azkaban/execapp/FlowRunnerManager.java
@@ -304,6 +304,7 @@ public class FlowRunnerManager implements EventListener {
}
for (Integer id: executionToKill) {
+ logger.info("Cleaning execution " + id + " from recently finished flows list.");
recentlyFinishedFlows.remove(id);
}
}
@@ -502,8 +503,9 @@ public class FlowRunnerManager implements EventListener {
if (event.getType() == Event.Type.FLOW_FINISHED) {
FlowRunner flowRunner = (FlowRunner)event.getRunner();
ExecutableFlow flow = flowRunner.getExecutableFlow();
- recentlyFinishedFlows.put(flow.getExecutionId(), flow);
+ recentlyFinishedFlows.put(flow.getExecutionId(), flow);
+ logger.info("Flow " + flow.getFlowId() + " is finished. Adding it to recently finished flows list.");
runningFlows.remove(flow.getExecutionId());
}
}
diff --git a/src/java/azkaban/executor/ExecutableFlow.java b/src/java/azkaban/executor/ExecutableFlow.java
index ef34069..408ed6d 100644
--- a/src/java/azkaban/executor/ExecutableFlow.java
+++ b/src/java/azkaban/executor/ExecutableFlow.java
@@ -356,6 +356,8 @@ public class ExecutableFlow {
}
this.flowStatus = Status.fromInteger((Integer)updateData.get("status"));
+
+ System.out.println("Updating status to " + flowStatus);
this.startTime = JSONUtils.getLongFromObject(updateData.get("startTime"));
this.endTime = JSONUtils.getLongFromObject(updateData.get("endTime"));
this.updateTime = JSONUtils.getLongFromObject(updateData.get("updateTime"));
diff --git a/src/java/azkaban/executor/ExecutorManager.java b/src/java/azkaban/executor/ExecutorManager.java
index 6be5ee0..5f7e532 100644
--- a/src/java/azkaban/executor/ExecutorManager.java
+++ b/src/java/azkaban/executor/ExecutorManager.java
@@ -796,7 +796,6 @@ public class ExecutorManager {
ref.setNextCheckTime(0);
ref.setNumErrors(0);
Status oldStatus = flow.getStatus();
-
flow.applyUpdateObject(updateData);
Status newStatus = flow.getStatus();
src/web/js/azkaban.jobedit.view.js 19(+15 -4)
diff --git a/src/web/js/azkaban.jobedit.view.js b/src/web/js/azkaban.jobedit.view.js
index d43bde8..d8ee5e0 100644
--- a/src/web/js/azkaban.jobedit.view.js
+++ b/src/web/js/azkaban.jobedit.view.js
@@ -153,10 +153,12 @@ azkaban.JobEditView = Backbone.View.extend({
$(tdName).append(nameData);
$(tdName).addClass("name");
$(tdName).addClass("editable");
+ nameData.myparent = tdName;
$(tdValue).append(valueData);
$(tdValue).addClass("editable");
-
+ valueData.myparent = tdValue;
+
$(tr).addClass("editRow");
$(tr).append(tdName);
$(tr).append(tdValue);
@@ -169,8 +171,8 @@ azkaban.JobEditView = Backbone.View.extend({
var curTarget = evt.currentTarget;
if (this.editingTarget != curTarget) {
- this.closeEditingTarget();
-
+ this.closeEditingTarget(evt);
+
var text = $(curTarget).children(".spanValue").text();
$(curTarget).empty();
@@ -178,9 +180,17 @@ azkaban.JobEditView = Backbone.View.extend({
$(input).attr("type", "text");
$(input).css("width", "100%");
$(input).val(text);
+
$(curTarget).addClass("editing");
$(curTarget).append(input);
$(input).focus();
+ var obj = this;
+ $(input).keypress(function(evt) {
+ if(evt.which == 13) {
+ obj.closeEditingTarget(evt);
+ }
+ });
+
this.editingTarget = curTarget;
}
},
@@ -191,7 +201,7 @@ azkaban.JobEditView = Backbone.View.extend({
$(row).remove();
},
closeEditingTarget: function(evt) {
- if (this.editingTarget != null && this.editingTarget != evt.target && this.editingTarget != evt.target.parentElement ) {
+ if (this.editingTarget != null && this.editingTarget != evt.target && this.editingTarget != evt.target.myparent ) {
var input = $(this.editingTarget).children("input")[0];
var text = $(input).val();
$(input).remove();
@@ -208,6 +218,7 @@ azkaban.JobEditView = Backbone.View.extend({
$(this.editingTarget).removeClass("editing");
$(this.editingTarget).append(valueData);
+ valueData.myparent=this.editingTarget;
this.editingTarget = null;
}
}