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 <[email protected]> Authored: Mon Jun 9 15:42:50 2014 -0700 Committer: Rohini Palaniswamy <[email protected]> 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)
