azkaban-aplcache

Fix JobRunner bug when job is cancelled early (#1148) This

6/4/2017 5:01:01 PM

Details

diff --git a/azkaban-exec-server/src/main/java/azkaban/execapp/JobRunner.java b/azkaban-exec-server/src/main/java/azkaban/execapp/JobRunner.java
index 13af90a..1373f91 100644
--- a/azkaban-exec-server/src/main/java/azkaban/execapp/JobRunner.java
+++ b/azkaban-exec-server/src/main/java/azkaban/execapp/JobRunner.java
@@ -584,13 +584,9 @@ public class JobRunner extends EventHandler implements Runnable {
     // Start the node.
     this.node.setStartTime(System.currentTimeMillis());
     Status finalStatus = this.node.getStatus();
+    uploadExecutableNode();
     if (!errorFound && !isKilled()) {
       fireEvent(Event.create(this, Type.JOB_STARTED, new EventData(this.node)));
-      try {
-        this.loader.uploadExecutableNode(this.node, this.props);
-      } catch (final ExecutorManagerException e1) {
-        this.logger.error("Error writing initial node properties");
-      }
 
       final Status prepareStatus = prepareJob();
       if (prepareStatus != null) {
@@ -626,6 +622,14 @@ public class JobRunner extends EventHandler implements Runnable {
     writeStatus();
   }
 
+  private void uploadExecutableNode() {
+    try {
+      this.loader.uploadExecutableNode(this.node, this.props);
+    } catch (final ExecutorManagerException e1) {
+      this.logger.error("Error writing initial node properties");
+    }
+  }
+
   private Status prepareJob() throws RuntimeException {
     // Check pre conditions
     if (this.props == null || this.isKilled()) {
diff --git a/azkaban-exec-server/src/test/java/azkaban/execapp/JobRunnerTest.java b/azkaban-exec-server/src/test/java/azkaban/execapp/JobRunnerTest.java
index 8aec1a4..eb2ed5c 100644
--- a/azkaban-exec-server/src/test/java/azkaban/execapp/JobRunnerTest.java
+++ b/azkaban-exec-server/src/test/java/azkaban/execapp/JobRunnerTest.java
@@ -306,6 +306,7 @@ public class JobRunnerTest {
     Assert.assertTrue(outputProps == null);
     Assert.assertTrue(logFile.exists());
 
+    Assert.assertEquals(2L, (long) loader.getNodeUpdateCount("testJob"));
     eventCollector.checkEventExists(Type.JOB_FINISHED);
   }