You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@oozie.apache.org by as...@apache.org on 2020/03/05 10:03:36 UTC

[oozie] branch master updated: OOZIE-3584 Fork-join action issue when action param cannot be resolved (jmakai via asalamon74)

This is an automated email from the ASF dual-hosted git repository.

asalamon74 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/oozie.git


The following commit(s) were added to refs/heads/master by this push:
     new 9910410  OOZIE-3584 Fork-join action issue when action param cannot be resolved (jmakai via asalamon74)
9910410 is described below

commit 99104107fd6e5f49b8301968a722b1c31a065349
Author: Andras Salamon <as...@apache.org>
AuthorDate: Thu Mar 5 11:03:20 2020 +0100

    OOZIE-3584 Fork-join action issue when action param cannot be resolved (jmakai via asalamon74)
---
 .../oozie/workflow/lite/LiteWorkflowInstance.java   | 20 +++++++++++++-------
 .../oozie/workflow/lite/TestLiteWorkflowLib.java    | 21 +++++++++++++++++++++
 release-log.txt                                     |  1 +
 3 files changed, 35 insertions(+), 7 deletions(-)

diff --git a/core/src/main/java/org/apache/oozie/workflow/lite/LiteWorkflowInstance.java b/core/src/main/java/org/apache/oozie/workflow/lite/LiteWorkflowInstance.java
index 0a36574..dc13e08 100644
--- a/core/src/main/java/org/apache/oozie/workflow/lite/LiteWorkflowInstance.java
+++ b/core/src/main/java/org/apache/oozie/workflow/lite/LiteWorkflowInstance.java
@@ -334,9 +334,6 @@ public class LiteWorkflowInstance implements Writable, WorkflowInstance {
     }
 
     public synchronized void fail(String nodeName) throws WorkflowException {
-        if (status.isEndState()) {
-            throw new WorkflowException(ErrorCode.E0718);
-        }
         String failedNode = failNode(nodeName);
         if (failedNode != null) {
             log.warn(XLog.STD, "Workflow Failed. Failing node [{0}]", failedNode);
@@ -344,11 +341,20 @@ public class LiteWorkflowInstance implements Writable, WorkflowInstance {
         else {
             //TODO failed attempting to fail the action. EXCEPTION
         }
-        List<String> killedNodes = killNodes();
-        if (killedNodes.size() > 1) {
-            log.warn(XLog.STD, "Workflow Failed, killing [{0}] nodes", killedNodes.size());
+
+        if (status.isEndState()) {
+            if (status == Status.FAILED) {
+                log.warn(XLog.STD, "An attempt was made to fail the workflow, which is already failed");
+            } else {
+                throw new WorkflowException(ErrorCode.E0718);
+            }
+        } else {
+            List<String> killedNodes = killNodes();
+            if (killedNodes.size() > 1) {
+                log.warn(XLog.STD, "Workflow Failed, killing [{0}] nodes", killedNodes.size());
+            }
+            status = Status.FAILED;
         }
-        status = Status.FAILED;
     }
 
     public synchronized void kill() throws WorkflowException {
diff --git a/core/src/test/java/org/apache/oozie/workflow/lite/TestLiteWorkflowLib.java b/core/src/test/java/org/apache/oozie/workflow/lite/TestLiteWorkflowLib.java
index 4ea02ee..a18cdf0 100644
--- a/core/src/test/java/org/apache/oozie/workflow/lite/TestLiteWorkflowLib.java
+++ b/core/src/test/java/org/apache/oozie/workflow/lite/TestLiteWorkflowLib.java
@@ -543,6 +543,27 @@ public class TestLiteWorkflowLib extends XTestCase {
         assertEquals(0, fails.size());
     }
 
+    public void testForkBothAsynchFailingNodes() throws WorkflowException {
+
+        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>",
+                new StartNodeDef(TestControlNodeHandler.class, "f"))
+                .addNode(new ForkNodeDef("f", TestControlNodeHandler.class, Arrays.asList(new String[]{"a", "b"})))
+                .addNode(new NodeDef("a", null, AsynchNodeHandler.class, Arrays.asList(new String[]{"j"})))
+                .addNode(new NodeDef("b", null, AsynchNodeHandler.class, Arrays.asList(new String[]{"j"})))
+                .addNode(new JoinNodeDef("j", TestControlNodeHandler.class, "end"))
+                .addNode(new EndNodeDef("end", TestControlNodeHandler.class));
+
+        LiteWorkflowInstance job = new LiteWorkflowInstance(def, new XConfiguration(), "1");
+        job.start();
+        assertEquals(WorkflowInstance.Status.RUNNING, job.getStatus());
+        job.fail("a");
+        job.fail("b");
+        assertEquals("Both nodes should be entered", 2, enters.size());
+        assertEquals("One of the nodes should be killed, which gets failed parallelly", 1, kills.size());
+        assertEquals("None of the nodes should be exited", 0, exits.size());
+        assertEquals("Both nodes should be failed", 2, fails.size());
+    }
+
     public void testFailWithRunningNodes() throws WorkflowException {
 
         LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>",
diff --git a/release-log.txt b/release-log.txt
index 8a006d6..090899c 100644
--- a/release-log.txt
+++ b/release-log.txt
@@ -1,5 +1,6 @@
 -- Oozie 5.3.0 release (trunk - unreleased)
 
+OOZIE-3584 Fork-join action issue when action param cannot be resolved (jmakai via asalamon74)
 OOZIE-3589 Avoid calling copyActionData method multiple times in ReRunXCommand (zuston via asalamon74)
 OOZIE-3590 Fix missing log expression parameter in SLACalculatorMemory (zuston via asalamon74)
 OOZIE-3551 Spark shouldn't obtain tokens withing the Spark action (Liz Szilagyi via gezapeti)