You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@oozie.apache.org by ro...@apache.org on 2014/06/10 00:42:56 UTC

git commit: OOZIE-1807 Workflow action doen't resolve retry-max and retry-interval (puru via rohini)

Repository: oozie
Updated Branches:
  refs/heads/master 052187f79 -> 9f16ce1d2


OOZIE-1807 Workflow action doen't resolve retry-max and retry-interval (puru via rohini)


Project: http://git-wip-us.apache.org/repos/asf/oozie/repo
Commit: http://git-wip-us.apache.org/repos/asf/oozie/commit/9f16ce1d
Tree: http://git-wip-us.apache.org/repos/asf/oozie/tree/9f16ce1d
Diff: http://git-wip-us.apache.org/repos/asf/oozie/diff/9f16ce1d

Branch: refs/heads/master
Commit: 9f16ce1d2fe45e3a783e895c3414d1926c388633
Parents: 052187f
Author: Rohini Palaniswamy <ro...@apache.org>
Authored: Mon Jun 9 15:42:50 2014 -0700
Committer: Rohini Palaniswamy <ro...@apache.org>
Committed: Mon Jun 9 15:42:50 2014 -0700

----------------------------------------------------------------------
 .../apache/oozie/command/wf/SignalXCommand.java |  2 ++
 .../workflow/lite/LiteWorkflowAppParser.java    | 21 +++++++++++++++++--
 .../lite/TestLiteWorkflowAppParser.java         | 22 +++++++++++++++++++-
 release-log.txt                                 |  1 +
 4 files changed, 43 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/oozie/blob/9f16ce1d/core/src/main/java/org/apache/oozie/command/wf/SignalXCommand.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/oozie/command/wf/SignalXCommand.java b/core/src/main/java/org/apache/oozie/command/wf/SignalXCommand.java
index 7968973..4a7283f 100644
--- a/core/src/main/java/org/apache/oozie/command/wf/SignalXCommand.java
+++ b/core/src/main/java/org/apache/oozie/command/wf/SignalXCommand.java
@@ -58,6 +58,7 @@ import org.apache.oozie.util.InstrumentUtils;
 import org.apache.oozie.util.LogUtils;
 import org.apache.oozie.util.XConfiguration;
 import org.apache.oozie.util.ParamChecker;
+import org.apache.oozie.util.XLog;
 import org.apache.oozie.util.XmlUtils;
 import org.apache.oozie.util.db.SLADbXOperations;
 import org.jdom.Element;
@@ -190,6 +191,7 @@ public class SignalXCommand extends WorkflowXCommand<Void> {
                 completed = workflowInstance.signal(wfAction.getExecutionPath(), wfAction.getSignalValue());
             }
             catch (WorkflowException e) {
+               LOG.error("Workflow action failed : " + e.getMessage(), e);
                 wfJob.setStatus(WorkflowJob.Status.valueOf(workflowInstance.getStatus().toString()));
                 completed = true;
             }

http://git-wip-us.apache.org/repos/asf/oozie/blob/9f16ce1d/core/src/main/java/org/apache/oozie/workflow/lite/LiteWorkflowAppParser.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/oozie/workflow/lite/LiteWorkflowAppParser.java b/core/src/main/java/org/apache/oozie/workflow/lite/LiteWorkflowAppParser.java
index 685503a..e47e619 100644
--- a/core/src/main/java/org/apache/oozie/workflow/lite/LiteWorkflowAppParser.java
+++ b/core/src/main/java/org/apache/oozie/workflow/lite/LiteWorkflowAppParser.java
@@ -18,6 +18,7 @@
 package org.apache.oozie.workflow.lite;
 
 import org.apache.oozie.workflow.WorkflowException;
+import org.apache.oozie.util.ELUtils;
 import org.apache.oozie.util.IOUtils;
 import org.apache.oozie.util.XConfiguration;
 import org.apache.oozie.util.XmlUtils;
@@ -28,6 +29,7 @@ import org.apache.oozie.ErrorCode;
 import org.apache.oozie.action.ActionExecutor;
 import org.apache.oozie.service.Services;
 import org.apache.oozie.service.ActionService;
+import org.apache.commons.lang.StringUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.jdom.Element;
 import org.jdom.JDOMException;
@@ -152,7 +154,7 @@ public class LiteWorkflowAppParser {
 
             Element wfDefElement = XmlUtils.parseXml(strDef);
             ParameterVerifier.verifyParameters(jobConf, wfDefElement);
-            LiteWorkflowApp app = parse(strDef, wfDefElement, configDefault);
+            LiteWorkflowApp app = parse(strDef, wfDefElement, configDefault, jobConf);
             Map<String, VisitStatus> traversed = new HashMap<String, VisitStatus>();
             traversed.put(app.getNode(StartNodeDef.START).getName(), VisitStatus.VISITING);
             validate(app, app.getNode(StartNodeDef.START), traversed);
@@ -376,11 +378,14 @@ public class LiteWorkflowAppParser {
      *
      * @param strDef
      * @param root
+     * @param configDefault
+     * @param jobConf
      * @return LiteWorkflowApp
      * @throws WorkflowException
      */
     @SuppressWarnings({"unchecked"})
-    private LiteWorkflowApp parse(String strDef, Element root, Configuration configDefault) throws WorkflowException {
+    private LiteWorkflowApp parse(String strDef, Element root, Configuration configDefault, Configuration jobConf)
+            throws WorkflowException {
         Namespace ns = root.getNamespace();
         LiteWorkflowApp def = null;
         Element global = null;
@@ -451,6 +456,18 @@ public class LiteWorkflowAppParser {
                                         String credStr = eNode.getAttributeValue(CRED_A);
                                         String userRetryMaxStr = eNode.getAttributeValue(USER_RETRY_MAX_A);
                                         String userRetryIntervalStr = eNode.getAttributeValue(USER_RETRY_INTERVAL_A);
+                                        try {
+                                            if (!StringUtils.isEmpty(userRetryMaxStr)) {
+                                                userRetryMaxStr = ELUtils.resolveAppName(userRetryMaxStr, jobConf);
+                                            }
+                                            if (!StringUtils.isEmpty(userRetryIntervalStr)) {
+                                                userRetryIntervalStr = ELUtils.resolveAppName(userRetryIntervalStr,
+                                                        jobConf);
+                                            }
+                                        }
+                                        catch (Exception e) {
+                                            throw new WorkflowException(ErrorCode.E0703, e.getMessage());
+                                        }
 
                                         String actionConf = XmlUtils.prettyPrint(eActionConf).toString();
                                         def.addNode(new ActionNodeDef(eNode.getAttributeValue(NAME_A), actionConf, actionHandlerClass,

http://git-wip-us.apache.org/repos/asf/oozie/blob/9f16ce1d/core/src/test/java/org/apache/oozie/workflow/lite/TestLiteWorkflowAppParser.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/oozie/workflow/lite/TestLiteWorkflowAppParser.java b/core/src/test/java/org/apache/oozie/workflow/lite/TestLiteWorkflowAppParser.java
index 41e6205..b47f808 100644
--- a/core/src/test/java/org/apache/oozie/workflow/lite/TestLiteWorkflowAppParser.java
+++ b/core/src/test/java/org/apache/oozie/workflow/lite/TestLiteWorkflowAppParser.java
@@ -18,13 +18,13 @@
 package org.apache.oozie.workflow.lite;
 
 
+import java.io.StringReader;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
 
-
 import org.apache.oozie.service.ActionService;
 import org.apache.oozie.service.LiteWorkflowStoreService;
 import org.apache.oozie.service.SchemaService;
@@ -1252,4 +1252,24 @@ public class TestLiteWorkflowAppParser extends XTestCase {
             assertEquals("E0730: Fork/Join not in pair", wfe.getMessage());
         }
     }
+
+    // Test parameterization of retry-max and retry-interval
+    public void testParameterizationRetry() throws Exception {
+        LiteWorkflowAppParser parser = new LiteWorkflowAppParser(null,
+                LiteWorkflowStoreService.LiteControlNodeHandler.class,
+                LiteWorkflowStoreService.LiteDecisionHandler.class, LiteWorkflowStoreService.LiteActionHandler.class);
+
+        String wf = "<workflow-app xmlns=\"uri:oozie:workflow:0.5\" name=\"test\" > "
+                + "<global> <job-tracker>localhost</job-tracker><name-node>localhost</name-node></global>"
+                + "<start to=\"retry\"/><action name=\"retry\" retry-max=\"${retryMax}\" retry-interval=\"${retryInterval}\">"
+                + "<java> <main-class>com.retry</main-class>" + "</java>" + "<ok to=\"end\"/>" + "<error to=\"end\"/>"
+                + "</action> <end name=\"end\"/></workflow-app>";
+        Configuration conf = new Configuration();
+        conf.set("retryMax", "3");
+        conf.set("retryInterval", "10");
+        LiteWorkflowApp app = parser.validateAndParse(new StringReader(wf), conf);
+        assertEquals(app.getNode("retry").getUserRetryMax(), "3");
+        assertEquals(app.getNode("retry").getUserRetryInterval(), "10");
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/oozie/blob/9f16ce1d/release-log.txt
----------------------------------------------------------------------
diff --git a/release-log.txt b/release-log.txt
index 23f6303..deead7b 100644
--- a/release-log.txt
+++ b/release-log.txt
@@ -1,5 +1,6 @@
 -- Oozie 4.1.0 release (trunk - unreleased)
 
+OOZIE-1807 Workflow action doen't resolve retry-max and retry-interval (puru via rohini)
 OOZIE-1686 Typo in DG_CommandLineTool (anbu78 via ryota)
 OOZIE-1804 Improve documentation for Coordinator Specification (lars_francke via rkanter)
 OOZIE-1828 Introduce counters JobStatus terminal states metrics (rkanter)