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)