Repository: oozie Updated Branches: refs/heads/master c0cc536a5 -> 568041dc8
OOZIE-2081 WorkflowJob notification to include coordinator action id (seoeun25 via rkanter) Project: http://git-wip-us.apache.org/repos/asf/oozie/repo Commit: http://git-wip-us.apache.org/repos/asf/oozie/commit/568041dc Tree: http://git-wip-us.apache.org/repos/asf/oozie/tree/568041dc Diff: http://git-wip-us.apache.org/repos/asf/oozie/diff/568041dc Branch: refs/heads/master Commit: 568041dc878683f33e916fbf0f4ccb5811640b61 Parents: c0cc536 Author: Robert Kanter <[email protected]> Authored: Tue Aug 16 22:05:15 2016 -0700 Committer: Robert Kanter <[email protected]> Committed: Tue Aug 16 22:05:15 2016 -0700 ---------------------------------------------------------------------- .../wf/WorkflowNotificationXCommand.java | 6 ++ .../wf/TestWorkflowNotificationXCommand.java | 67 ++++++++++++++++++++ .../src/site/twiki/WorkflowFunctionalSpec.twiki | 1 + release-log.txt | 1 + 4 files changed, 75 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/oozie/blob/568041dc/core/src/main/java/org/apache/oozie/command/wf/WorkflowNotificationXCommand.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/oozie/command/wf/WorkflowNotificationXCommand.java b/core/src/main/java/org/apache/oozie/command/wf/WorkflowNotificationXCommand.java index d973def..62bf9b5 100644 --- a/core/src/main/java/org/apache/oozie/command/wf/WorkflowNotificationXCommand.java +++ b/core/src/main/java/org/apache/oozie/command/wf/WorkflowNotificationXCommand.java @@ -31,6 +31,7 @@ public class WorkflowNotificationXCommand extends NotificationXCommand { private static final String STATUS_PATTERN = "\\$status"; private static final String JOB_ID_PATTERN = "\\$jobId"; + private static final String PARENT_ID_PATTERN = "\\$parentId"; private static final String NODE_NAME_PATTERN = "\\$nodeName"; public WorkflowNotificationXCommand(WorkflowJobBean workflow) { @@ -41,6 +42,11 @@ public class WorkflowNotificationXCommand extends NotificationXCommand { if (url != null) { url = url.replaceAll(JOB_ID_PATTERN, workflow.getId()); url = url.replaceAll(STATUS_PATTERN, workflow.getStatus().toString()); + if (workflow.getParentId() == null) { + url = url.replaceAll(PARENT_ID_PATTERN, ""); + } else { + url = url.replaceAll(PARENT_ID_PATTERN, workflow.getParentId()); + } proxyConf = workflow.getWorkflowInstance().getConf() .get(OozieClient.WORKFLOW_NOTIFICATION_PROXY, ConfigurationService.get(NOTIFICATION_PROXY_KEY)); LOG.debug("Proxy :" + proxyConf); http://git-wip-us.apache.org/repos/asf/oozie/blob/568041dc/core/src/test/java/org/apache/oozie/command/wf/TestWorkflowNotificationXCommand.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/oozie/command/wf/TestWorkflowNotificationXCommand.java b/core/src/test/java/org/apache/oozie/command/wf/TestWorkflowNotificationXCommand.java index 4d2df21..ef342a4 100644 --- a/core/src/test/java/org/apache/oozie/command/wf/TestWorkflowNotificationXCommand.java +++ b/core/src/test/java/org/apache/oozie/command/wf/TestWorkflowNotificationXCommand.java @@ -30,9 +30,39 @@ import org.apache.oozie.workflow.WorkflowInstance; import org.junit.Assert; import org.mockito.Mockito; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + public class TestWorkflowNotificationXCommand extends XTestCase { private EmbeddedServletContainer container; + public static class CallbackServlet extends HttpServlet { + public static volatile String JOB_ID = null; + public static String NODE_NAME = null; + public static String STATUS = null; + public static String PARENT_ID = null; + + public static void reset() { + JOB_ID = null; + NODE_NAME = null; + STATUS = null; + PARENT_ID = null; + } + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + JOB_ID = req.getParameter("jobId"); + NODE_NAME = req.getParameter("nodeName"); + STATUS = req.getParameter("status"); + PARENT_ID = req.getParameter("parentId"); + resp.setStatus(HttpServletResponse.SC_OK); + } + + } + @Override public void setUp() throws Exception { super.setUp(); @@ -41,6 +71,8 @@ public class TestWorkflowNotificationXCommand extends XTestCase { services.init(); container = new EmbeddedServletContainer("blah"); container.addServletEndpoint("/hang/*", HangServlet.class); + CallbackServlet.reset(); + container.addServletEndpoint("/callback/*", CallbackServlet.class); container.start(); } @@ -76,4 +108,39 @@ public class TestWorkflowNotificationXCommand extends XTestCase { Assert.assertTrue(end - start >= 50); Assert.assertTrue(end - start < 10000); } + + public void testWFNotification() throws Exception { + + String notificationUrl = "/callback/wf?jobId=$jobId&parentId=$parentId"; + _testNotificationParentId(notificationUrl, "1", null, ""); + + notificationUrl = "/callback/wf?jobId=$jobId"; + _testNotificationParentId(notificationUrl, "1", null, null); + + notificationUrl = "/callback/wf?jobId=$jobId&parentId=$parentId"; + _testNotificationParentId(notificationUrl, "1", "0000000-111111-oozie-XXX-C@1", "0000000-111111-oozie-XXX-C@1"); + + notificationUrl = "/callback/wf?jobId=$jobId"; + _testNotificationParentId(notificationUrl, "1", "0000000-111111-oozie-XXX-C@1", null); + + } + + private void _testNotificationParentId(String notificationUrl, String jobId, String parentId, String expectedParentId) + throws Exception{ + XConfiguration conf = new XConfiguration(); + conf.set(OozieClient.WORKFLOW_NOTIFICATION_URL, container.getServletURL(notificationUrl)); + WorkflowInstance wfi = Mockito.mock(WorkflowInstance.class); + Mockito.when(wfi.getConf()).thenReturn(conf); + WorkflowJobBean workflow = Mockito.mock(WorkflowJobBean.class); + Mockito.when(workflow.getId()).thenReturn(jobId); + Mockito.when(workflow.getStatus()).thenReturn(WorkflowJob.Status.SUCCEEDED); + Mockito.when(workflow.getParentId()).thenReturn(parentId); + Mockito.when(workflow.getWorkflowInstance()).thenReturn(wfi); + WorkflowNotificationXCommand command = new WorkflowNotificationXCommand(workflow); + command.setRetry(3); + command.call(); + + Assert.assertEquals(jobId, CallbackServlet.JOB_ID); + Assert.assertEquals(expectedParentId, CallbackServlet.PARENT_ID); + } } http://git-wip-us.apache.org/repos/asf/oozie/blob/568041dc/docs/src/site/twiki/WorkflowFunctionalSpec.twiki ---------------------------------------------------------------------- diff --git a/docs/src/site/twiki/WorkflowFunctionalSpec.twiki b/docs/src/site/twiki/WorkflowFunctionalSpec.twiki index 8b1bc19..7474ea5 100644 --- a/docs/src/site/twiki/WorkflowFunctionalSpec.twiki +++ b/docs/src/site/twiki/WorkflowFunctionalSpec.twiki @@ -2275,6 +2275,7 @@ the notification: * =$jobId= : The workflow job ID * =$status= : the workflow current state + * =$parentId= : The parent ID of the workflow job. If there is no parent ID, it will be replaced with an empty string. ---+++ 5.2 Node Start and End Notifications http://git-wip-us.apache.org/repos/asf/oozie/blob/568041dc/release-log.txt ---------------------------------------------------------------------- diff --git a/release-log.txt b/release-log.txt index fc2854b..b222fc0 100644 --- a/release-log.txt +++ b/release-log.txt @@ -1,5 +1,6 @@ -- Oozie 4.3.0 release (trunk - unreleased) +OOZIE-2081 WorkflowJob notification to include coordinator action id (seoeun25 via rkanter) OOZIE-2036 Drop support for Java 1.6 (gezapeti via jaydeepvishwakarma) OOZIE-2512 ShareLibservice returns incorrect path for jar (satishsaley via puru) OOZIE-2508 Documentation change for Coord action rerun [OOZIE-1735] (satishsaley via puru)
