diff --git a/src/java/azkaban/execapp/FlowRunner.java b/src/java/azkaban/execapp/FlowRunner.java
index dcef893..6680b7a 100644
--- a/src/java/azkaban/execapp/FlowRunner.java
+++ b/src/java/azkaban/execapp/FlowRunner.java
@@ -783,11 +783,11 @@ public class FlowRunner extends EventHandler implements Runnable {
// The KILLED status occurs when cancel is invoked. We want to keep this
// status even in failure conditions.
- if (flow.getStatus() != Status.KILLED) {
+ if (!flowCancelled) {
// During a failure, we propagate the failure to parent flows
propagateStatus(node.getParentFlow(), Status.FAILED_FINISHING);
- if (failureAction == FailureAction.CANCEL_ALL && !flowCancelled) {
+ if (failureAction == FailureAction.CANCEL_ALL) {
logger.info("Flow failed. Failure option is Cancel All. Stopping execution.");
cancel();
}
diff --git a/unit/java/azkaban/test/execapp/FlowRunnerTest2.java b/unit/java/azkaban/test/execapp/FlowRunnerTest2.java
index 2cb47b8..98f7818 100644
--- a/unit/java/azkaban/test/execapp/FlowRunnerTest2.java
+++ b/unit/java/azkaban/test/execapp/FlowRunnerTest2.java
@@ -584,7 +584,7 @@ public class FlowRunnerTest2 {
expectedStateMap.put("jobb:innerJobC", Status.FAILED);
expectedStateMap.put("jobb:innerFlow", Status.KILLED);
expectedStateMap.put("jobc", Status.FAILED);
- expectedStateMap.put("jobd", Status.FAILED);
+ expectedStateMap.put("jobd", Status.KILLED);
expectedStateMap.put("jobd:innerJobA", Status.FAILED);
expectedStateMap.put("jobd:innerFlow2", Status.KILLED);
expectedStateMap.put("jobe", Status.KILLED);
@@ -807,7 +807,7 @@ public class FlowRunnerTest2 {
expectedStateMap.put("jobe", Status.KILLED);
expectedStateMap.put("jobf", Status.KILLED);
- Assert.assertEquals(Status.KILLED, flow.getStatus());
+ Assert.assertEquals(Status.FAILED, flow.getStatus());
compareStates(expectedStateMap, nodeMap);
Assert.assertFalse(thread.isAlive());
}