azkaban-memoizeit
Details
diff --git a/src/java/azkaban/execapp/FlowRunner.java b/src/java/azkaban/execapp/FlowRunner.java
index 9d81674..65ba670 100644
--- a/src/java/azkaban/execapp/FlowRunner.java
+++ b/src/java/azkaban/execapp/FlowRunner.java
@@ -296,6 +296,7 @@ public class FlowRunner extends EventHandler implements Runnable {
Props outputProps = collectOutputProps(node);
node.setStatus(Status.QUEUED);
JobRunner runner = createJobRunner(node, outputProps);
+ logger.info("Submitting job " + node.getJobId() + " to run.");
try {
executorService.submit(runner);
jobRunners.put(node.getJobId(), runner);
@@ -305,10 +306,12 @@ public class FlowRunner extends EventHandler implements Runnable {
} // If killed, then auto complete and KILL
else if (node.getStatus() == Status.KILLED) {
+ logger.info("Killing " + node.getJobId() + " due to prior errors.");
node.setStartTime(currentTime);
node.setEndTime(currentTime);
} // If disabled, then we auto skip
else if (node.getStatus() == Status.DISABLED) {
+ logger.info("Skipping disabled job " + node.getJobId() + ".");
node.setStartTime(currentTime);
node.setEndTime(currentTime);
node.setStatus(Status.SKIPPED);
diff --git a/src/java/azkaban/executor/ExecutorManager.java b/src/java/azkaban/executor/ExecutorManager.java
index b3ab60d..90ea1bc 100644
--- a/src/java/azkaban/executor/ExecutorManager.java
+++ b/src/java/azkaban/executor/ExecutorManager.java
@@ -371,10 +371,12 @@ public class ExecutorManager {
ExecutionOptions options = exflow.getExecutionOptions();
- // Disable jobs
- for(String disabledId : options.getDisabledJobs()) {
- ExecutableNode node = exflow.getExecutableNode(disabledId);
- node.setStatus(Status.DISABLED);
+ if (options.getDisabledJobs() != null) {
+ // Disable jobs
+ for(String disabledId : options.getDisabledJobs()) {
+ ExecutableNode node = exflow.getExecutableNode(disabledId);
+ node.setStatus(Status.DISABLED);
+ }
}
String message = "";
diff --git a/src/java/azkaban/scheduler/Schedule.java b/src/java/azkaban/scheduler/Schedule.java
index 2fd6074..3e84c86 100644
--- a/src/java/azkaban/scheduler/Schedule.java
+++ b/src/java/azkaban/scheduler/Schedule.java
@@ -344,6 +344,14 @@ public class Schedule{
ExecutionOptions execOptions = ExecutionOptions.createFromObject(schedObj.get("executionOptions"));
this.executionOptions = execOptions;
}
+ else if (schedObj.containsKey("flowOptions")){
+ ExecutionOptions execOptions = ExecutionOptions.createFromObject(schedObj.get("flowOptions"));
+ this.executionOptions = execOptions;
+ }
+ else {
+ this.executionOptions = new ExecutionOptions();
+ }
+
if (schedObj.containsKey("slaOptions")) {
SlaOptions slaOptions = SlaOptions.fromObject(schedObj.get("slaOptions"));
this.slaOptions = slaOptions;
diff --git a/src/java/azkaban/webapp/servlet/JMXHttpServlet.java b/src/java/azkaban/webapp/servlet/JMXHttpServlet.java
index 78aec2f..75982d1 100644
--- a/src/java/azkaban/webapp/servlet/JMXHttpServlet.java
+++ b/src/java/azkaban/webapp/servlet/JMXHttpServlet.java
@@ -162,13 +162,18 @@ public class JMXHttpServlet extends LoginAbstractAzkabanServlet implements Conne
Map<String, Object> executorMBeans = new HashMap<String,Object>();
Set<String> primaryServerHosts = executorManager.getPrimaryServerHosts();
for (String hostPort: executorManager.getAllActiveExecutorServerHosts()) {
- Map<String, Object> mbeans = executorManager.callExecutorJMX(hostPort, JMX_GET_MBEANS, null);
-
- if (primaryServerHosts.contains(hostPort)) {
- executorMBeans.put(hostPort, mbeans.get("mbeans"));
+ try {
+ Map<String, Object> mbeans = executorManager.callExecutorJMX(hostPort, JMX_GET_MBEANS, null);
+
+ if (primaryServerHosts.contains(hostPort)) {
+ executorMBeans.put(hostPort, mbeans.get("mbeans"));
+ }
+ else {
+ executorMBeans.put(hostPort, mbeans.get("mbeans"));
+ }
}
- else {
- executorMBeans.put(hostPort, mbeans.get("mbeans"));
+ catch (IOException e) {
+ logger.error("Cannot contact executor " + hostPort, e);
}
}
src/web/css/azkaban.css 6(+5 -1)
diff --git a/src/web/css/azkaban.css b/src/web/css/azkaban.css
index a138e89..8fca496 100644
--- a/src/web/css/azkaban.css
+++ b/src/web/css/azkaban.css
@@ -2368,7 +2368,7 @@ span.sublabel {
}
#flow-status table td.PAUSED {
- color: #FF6600;
+ color: #C82123;
}
#flow-status table td.FAILED_FINISHING {
@@ -2464,6 +2464,10 @@ td .status.FAILED {
background-color: #C82123;
}
+td .status.PAUSED {
+ background-color: #C82123;
+}
+
td .status.READY {
background-color: #CCC;
}
src/web/js/azkaban.exflow.view.js 68(+22 -46)
diff --git a/src/web/js/azkaban.exflow.view.js b/src/web/js/azkaban.exflow.view.js
index cdbb892..bde19da 100644
--- a/src/web/js/azkaban.exflow.view.js
+++ b/src/web/js/azkaban.exflow.view.js
@@ -519,57 +519,33 @@ azkaban.FlowLogView = Backbone.View.extend({
var requestURL = contextURL + "/executor";
var model = this.model;
console.log("fetchLogs offset is " + offset)
-// $.get(
-// requestURL,
-// {"execid": execId, "ajax":"fetchExecFlowLogs", "offset": offset, "length": 50000},
-// function(data) {
-// console.log("fetchLogs");
-// if (data.error) {
-// console.log(data.error);
-// }
-// else {
-// var log = $("#logSection").text();
-// if (!log) {
-// log = data.data;
-// }
-// else {
-// log += data.data;
-// }
-//
-// var newOffset = data.offset + data.length;
-//
-// $("#logSection").text(log);
-// model.set({"offset": newOffset, "log": log});
-// $(".logViewer").scrollTop(9999);
-// }
-// }
-// );
+
$.ajax({async:false,
url:requestURL,
data:{"execid": execId, "ajax":"fetchExecFlowLogs", "offset": offset, "length": 50000},
success:
function(data) {
- console.log("fetchLogs");
- if (data.error) {
- console.log(data.error);
- }
- else {
- var log = $("#logSection").text();
- if (!log) {
- log = data.data;
- }
- else {
- log += data.data;
- }
-
- var newOffset = data.offset + data.length;
-
- $("#logSection").text(log);
- model.set({"offset": newOffset, "log": log});
- $(".logViewer").scrollTop(9999);
- }
- }
- })
+ console.log("fetchLogs");
+ if (data.error) {
+ console.log(data.error);
+ }
+ else {
+ var log = $("#logSection").text();
+ if (!log) {
+ log = data.data;
+ }
+ else {
+ log += data.data;
+ }
+
+ var newOffset = data.offset + data.length;
+
+ $("#logSection").text(log);
+ model.set({"offset": newOffset, "log": log});
+ $(".logViewer").scrollTop(9999);
+ }
+ }
+ });
}
});