Repository: oozie Updated Branches: refs/heads/master 0b4d3521a -> 5045f89cf
OOZIE-1725 add coord EL functions to be used in SLA tag (ryota) Project: http://git-wip-us.apache.org/repos/asf/oozie/repo Commit: http://git-wip-us.apache.org/repos/asf/oozie/commit/5045f89c Tree: http://git-wip-us.apache.org/repos/asf/oozie/tree/5045f89c Diff: http://git-wip-us.apache.org/repos/asf/oozie/diff/5045f89c Branch: refs/heads/master Commit: 5045f89cf1042721b9f7fd8b070390b8e0afef7e Parents: 0b4d352 Author: egashira <[email protected]> Authored: Tue Apr 1 18:14:59 2014 -0700 Committer: egashira <[email protected]> Committed: Tue Apr 1 18:14:59 2014 -0700 ---------------------------------------------------------------------- .../oozie/command/coord/CoordCommandUtils.java | 14 +++---- .../command/coord/CoordSubmitXCommand.java | 2 +- .../apache/oozie/coord/CoordELEvaluator.java | 43 ++++++++++++++++++-- core/src/main/resources/oozie-default.xml | 24 ++++++++++- .../TestCoordActionMaterializeCommand.java | 40 +++++++++++++----- .../command/coord/TestCoordSubmitXCommand.java | 15 ++++++- .../oozie/coord/TestCoordELFunctions.java | 16 ++++++++ .../apache/oozie/coord/TestHCatELFunctions.java | 33 +++++++++++++++ release-log.txt | 1 + 9 files changed, 161 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/oozie/blob/5045f89c/core/src/main/java/org/apache/oozie/command/coord/CoordCommandUtils.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/oozie/command/coord/CoordCommandUtils.java b/core/src/main/java/org/apache/oozie/command/coord/CoordCommandUtils.java index b00eb7b..8d7b732 100644 --- a/core/src/main/java/org/apache/oozie/command/coord/CoordCommandUtils.java +++ b/core/src/main/java/org/apache/oozie/command/coord/CoordCommandUtils.java @@ -413,20 +413,21 @@ public class CoordCommandUtils { } /** - * @param eSla - * @param nominalTime + * @param eAction + * @param coordAction * @param conf * @return boolean to determine whether the SLA element is present or not * @throws CoordinatorJobException */ - public static boolean materializeSLA(Element eSla, Date nominalTime, Configuration conf) + public static boolean materializeSLA(Element eAction, CoordinatorActionBean coordAction, Configuration conf) throws CoordinatorJobException { + Element eSla = eAction.getChild("action", eAction.getNamespace()).getChild("info", eAction.getNamespace("sla")); if (eSla == null) { // eAppXml.getNamespace("sla")); return false; } try { - ELEvaluator evalSla = CoordELEvaluator.createSLAEvaluator(nominalTime, conf); + ELEvaluator evalSla = CoordELEvaluator.createSLAEvaluator(eAction, coordAction, conf); List<Element> elemList = eSla.getChildren(); for (Element elem : elemList) { String updated; @@ -500,10 +501,6 @@ public class CoordCommandUtils { eAction.setAttribute("action-nominal-time", DateUtils.formatDateOozieTZ(nominalTime)); eAction.setAttribute("action-actual-time", DateUtils.formatDateOozieTZ(actualTime)); - boolean isSla = CoordCommandUtils.materializeSLA( - eAction.getChild("action", eAction.getNamespace()).getChild("info", eAction.getNamespace("sla")), - nominalTime, conf); - // Setting up action bean actionBean.setCreatedConf(XmlUtils.prettyPrint(conf).toString()); actionBean.setRunConf(XmlUtils.prettyPrint(conf).toString()); @@ -524,6 +521,7 @@ public class CoordCommandUtils { } } actionBean.setNominalTime(nominalTime); + boolean isSla = CoordCommandUtils.materializeSLA(eAction, actionBean, conf); if (isSla == true) { actionBean.setSlaXml(XmlUtils.prettyPrint( eAction.getChild("action", eAction.getNamespace()).getChild("info", eAction.getNamespace("sla"))) http://git-wip-us.apache.org/repos/asf/oozie/blob/5045f89c/core/src/main/java/org/apache/oozie/command/coord/CoordSubmitXCommand.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/oozie/command/coord/CoordSubmitXCommand.java b/core/src/main/java/org/apache/oozie/command/coord/CoordSubmitXCommand.java index 9e6a3d5..d215180 100644 --- a/core/src/main/java/org/apache/oozie/command/coord/CoordSubmitXCommand.java +++ b/core/src/main/java/org/apache/oozie/command/coord/CoordSubmitXCommand.java @@ -635,7 +635,6 @@ public class CoordSubmitXCommand extends SubmitTransitionXCommand { evalFreq = CoordELEvaluator.createELEvaluatorForGroup(conf, "coord-job-submit-freq"); evalNofuncs = CoordELEvaluator.createELEvaluatorForGroup(conf, "coord-job-submit-nofuncs"); evalInst = CoordELEvaluator.createELEvaluatorForGroup(conf, "coord-job-submit-instances"); - evalSla = CoordELEvaluator.createELEvaluatorForGroup(conf, "coord-sla-submit"); evalAction = CoordELEvaluator.createELEvaluatorForGroup(conf, "coord-action-start"); evalTimeout = CoordELEvaluator.createELEvaluatorForGroup(conf, "coord-job-wait-timeout"); } @@ -782,6 +781,7 @@ public class CoordSubmitXCommand extends SubmitTransitionXCommand { resolveTagContents("value", tmpProp, evalData); } } + evalSla = CoordELEvaluator.createELEvaluatorForDataAndConf(conf, "coord-sla-submit", dataNameList); resolveSLA(eAppXml, coordJob); return eAppXml; } http://git-wip-us.apache.org/repos/asf/oozie/blob/5045f89c/core/src/main/java/org/apache/oozie/coord/CoordELEvaluator.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/oozie/coord/CoordELEvaluator.java b/core/src/main/java/org/apache/oozie/coord/CoordELEvaluator.java index 0341aa1..87f298d 100644 --- a/core/src/main/java/org/apache/oozie/coord/CoordELEvaluator.java +++ b/core/src/main/java/org/apache/oozie/coord/CoordELEvaluator.java @@ -25,6 +25,7 @@ import java.util.List; import java.util.Map; import org.apache.hadoop.conf.Configuration; +import org.apache.oozie.CoordinatorActionBean; import org.apache.oozie.command.coord.CoordCommandUtils; import org.apache.oozie.service.ELService; import org.apache.oozie.service.Services; @@ -113,18 +114,52 @@ public class CoordELEvaluator { /** * Create a SLA evaluator to be used during Materialization - * - * @param nominalTime + * @param eAction + * @param coordAction * @param conf * @return * @throws Exception */ - public static ELEvaluator createSLAEvaluator(Date nominalTime, Configuration conf) throws Exception { + public static ELEvaluator createSLAEvaluator(Element eAction, CoordinatorActionBean coordAction, Configuration conf) + throws Exception { ELEvaluator eval = Services.get().get(ELService.class).createEvaluator("coord-sla-create"); setConfigToEval(eval, conf); SyncCoordAction appInst = new SyncCoordAction();// TODO: - appInst.setNominalTime(nominalTime); + appInst.setNominalTime(coordAction.getNominalTime()); + appInst.setActualTime(coordAction.getCreatedTime()); + appInst.setActionId(coordAction.getId()); + appInst.setName(eAction.getAttributeValue("name")); CoordELFunctions.configureEvaluator(eval, null, appInst); + + Element events = eAction.getChild("output-events", eAction.getNamespace()); + if (events != null) { + for (Object obj : events.getChildren("data-out", eAction.getNamespace())) { + Element data = (Element) obj; + if (data.getChild("uris", data.getNamespace()) != null) { + String uris = data.getChild("uris", data.getNamespace()).getTextTrim(); + uris = uris.replaceAll(CoordELFunctions.INSTANCE_SEPARATOR, CoordELFunctions.DIR_SEPARATOR); + eval.setVariable(".dataout." + data.getAttributeValue("name"), uris); + } + if (data.getChild(CoordCommandUtils.UNRESOLVED_INST_TAG, data.getNamespace()) != null) { + eval.setVariable(".dataout." + data.getAttributeValue("name") + ".unresolved", "true"); + } + } + } + return eval; + } + + /** + * Create an Evaluator using conf and input/output-data (used for sla) + * @param conf + * @param group + * @param dataNameList + * @return + * @throws Exception + */ + public static ELEvaluator createELEvaluatorForDataAndConf(Configuration conf, String group, + HashMap<String, String> dataNameList) throws Exception { + ELEvaluator eval = createELEvaluatorForDataEcho(conf, group, dataNameList); + setConfigToEval(eval, conf); return eval; } http://git-wip-us.apache.org/repos/asf/oozie/blob/5045f89c/core/src/main/resources/oozie-default.xml ---------------------------------------------------------------------- diff --git a/core/src/main/resources/oozie-default.xml b/core/src/main/resources/oozie-default.xml index 34362aa..0198230 100644 --- a/core/src/main/resources/oozie-default.xml +++ b/core/src/main/resources/oozie-default.xml @@ -915,9 +915,19 @@ <property> <name>oozie.service.ELService.functions.coord-sla-submit</name> <value> + coord:dataOut=org.apache.oozie.coord.CoordELFunctions#ph1_coord_dataOut_echo, coord:nominalTime=org.apache.oozie.coord.CoordELFunctions#ph1_coord_nominalTime_echo_fixed, + coord:actualTime=org.apache.oozie.coord.CoordELFunctions#ph1_coord_actualTime_echo_wrap, + coord:dateOffset=org.apache.oozie.coord.CoordELFunctions#ph1_coord_dateOffset_echo, + coord:formatTime=org.apache.oozie.coord.CoordELFunctions#ph1_coord_formatTime_echo, + coord:actionId=org.apache.oozie.coord.CoordELFunctions#ph1_coord_actionId_echo, + coord:name=org.apache.oozie.coord.CoordELFunctions#ph1_coord_name_echo, coord:conf=org.apache.oozie.coord.CoordELFunctions#coord_conf, - coord:user=org.apache.oozie.coord.CoordELFunctions#coord_user + coord:user=org.apache.oozie.coord.CoordELFunctions#coord_user, + coord:databaseOut=org.apache.oozie.coord.HCatELFunctions#ph1_coord_databaseOut_echo, + coord:tableOut=org.apache.oozie.coord.HCatELFunctions#ph1_coord_tableOut_echo, + coord:dataOutPartitions=org.apache.oozie.coord.HCatELFunctions#ph1_coord_dataOutPartitions_echo, + coord:dataOutPartitionValue=org.apache.oozie.coord.HCatELFunctions#ph1_coord_dataOutPartitionValue_echo </value> <description> EL functions declarations, separated by commas, format is [PREFIX:]NAME=CLASS#METHOD. @@ -1072,9 +1082,19 @@ <property> <name>oozie.service.ELService.functions.coord-sla-create</name> <value> + coord:dataOut=org.apache.oozie.coord.CoordELFunctions#ph3_coord_dataOut, coord:nominalTime=org.apache.oozie.coord.CoordELFunctions#ph2_coord_nominalTime, + coord:actualTime=org.apache.oozie.coord.CoordELFunctions#ph2_coord_actualTime, + coord:dateOffset=org.apache.oozie.coord.CoordELFunctions#ph2_coord_dateOffset, + coord:formatTime=org.apache.oozie.coord.CoordELFunctions#ph2_coord_formatTime, + coord:actionId=org.apache.oozie.coord.CoordELFunctions#ph2_coord_actionId, + coord:name=org.apache.oozie.coord.CoordELFunctions#ph2_coord_name, coord:conf=org.apache.oozie.coord.CoordELFunctions#coord_conf, - coord:user=org.apache.oozie.coord.CoordELFunctions#coord_user + coord:user=org.apache.oozie.coord.CoordELFunctions#coord_user, + coord:databaseOut=org.apache.oozie.coord.HCatELFunctions#ph3_coord_databaseOut, + coord:tableOut=org.apache.oozie.coord.HCatELFunctions#ph3_coord_tableOut, + coord:dataOutPartitions=org.apache.oozie.coord.HCatELFunctions#ph3_coord_dataOutPartitions, + coord:dataOutPartitionValue=org.apache.oozie.coord.HCatELFunctions#ph3_coord_dataOutPartitionValue </value> <description> EL functions declarations, separated by commas, format is [PREFIX:]NAME=CLASS#METHOD. http://git-wip-us.apache.org/repos/asf/oozie/blob/5045f89c/core/src/test/java/org/apache/oozie/command/coord/TestCoordActionMaterializeCommand.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/oozie/command/coord/TestCoordActionMaterializeCommand.java b/core/src/test/java/org/apache/oozie/command/coord/TestCoordActionMaterializeCommand.java index c5a04d7..6278515 100644 --- a/core/src/test/java/org/apache/oozie/command/coord/TestCoordActionMaterializeCommand.java +++ b/core/src/test/java/org/apache/oozie/command/coord/TestCoordActionMaterializeCommand.java @@ -51,12 +51,23 @@ public class TestCoordActionMaterializeCommand extends XTestCase { public void testActionMater() throws Exception { String jobId = "0000000-" + new Date().getTime() + "-testActionMater-C"; - - Date startTime = DateUtils.parseDateOozieTZ("2009-03-06T010:00Z"); + String startTimeStr = "2009-03-06T10:00Z"; + Date startTime = DateUtils.parseDateOozieTZ(startTimeStr); Date endTime = DateUtils.parseDateOozieTZ("2009-03-11T10:00Z"); addRecordToJobTable(jobId, startTime, endTime); new CoordActionMaterializeCommand(jobId, startTime, endTime).call(); CoordinatorActionBean action = checkCoordAction(jobId + "@1"); + assertEquals(action.getActionNumber(), 1); + assertEquals(action.getNominalTime(), startTime); + assertTrue(action.getMissingDependencies().indexOf("file:///tmp/coord/workflows/2009/03/01") > -1); + String actionXml = action.getActionXml(); + String slaNotifMsg = actionXml.substring(actionXml.indexOf("<sla:notification-msg>") + 22, + actionXml.indexOf("</sla:notification-msg>")); + String expectedSlaMsg = "Notifying User for 2009-03-06T10:00Z," + + DateUtils.formatDateOozieTZ(action.getCreatedTime()) + ",2009-03-06,2009-03-07T10:00Z," + + action.getId() + ",NAME,testValue,testUser," + + "file:///tmp/coord/workflows/2009/22myOutputDatabase,myOutputTable,'datestamp=20090306'"; + assertEquals(expectedSlaMsg, slaNotifMsg); } public void testActionMaterWithPauseTime1() throws Exception { @@ -107,7 +118,8 @@ public class TestCoordActionMaterializeCommand extends XTestCase { coordJob.setUser("testUser"); coordJob.setGroup("testGroup"); coordJob.setTimeZone("America/Los_Angeles"); - String confStr = "<configuration></configuration>"; + String confStr = "<configuration><property><name>testProperty</name><value>testValue</value></property>" + + "<property><name>user.name</name><value>testUser</value></property></configuration>"; coordJob.setConf(confStr); String appXml = "<coordinator-app xmlns='uri:oozie:coordinator:0.1' xmlns:sla='uri:oozie:sla:0.1' name='NAME' frequency=\"1\" start='2009-03-06T010:00Z' end='2009-03-11T10:00Z' timezone='America/Los_Angeles' freq_timeunit='DAY' end_of_duration='NONE'>"; appXml += "<controls>"; @@ -122,8 +134,6 @@ public class TestCoordActionMaterializeCommand extends XTestCase { appXml += "</dataset>"; appXml += "<instance>${coord:current(0)}</instance>"; appXml += "<instance>${coord:latest(-1)}</instance>"; - //appXml += "<start-instance>${coord:current(-2)}</start-instance>"; - //appXml += "<end-instance>${coord:current(0)}</end-instance>"; appXml += "</data-in>"; appXml += "</input-events>"; appXml += "<output-events>"; @@ -133,6 +143,13 @@ public class TestCoordActionMaterializeCommand extends XTestCase { appXml += "</dataset>"; appXml += "<instance>${coord:current(-1)}</instance>"; appXml += "</data-out>"; + appXml += "<data-out name='aggregated-logs' dataset='Stats'>"; + appXml += "<dataset name='Stats' frequency='1' initial-instance='2009-01-01T01:00Z' "; + appXml += "timezone='UTC' freq_timeunit='DAY' end_of_duration='NONE'>"; + appXml += "<uri-template>hcat://foo:11002/myOutputDatabase/myOutputTable/datestamp=${YEAR}${MONTH}${DAY}"; + appXml += "</uri-template></dataset>"; + appXml += "<instance>${coord:current(0)}</instance>"; + appXml += "</data-out>"; appXml += "</output-events>"; appXml += "<action>"; appXml += "<workflow>"; @@ -149,16 +166,19 @@ public class TestCoordActionMaterializeCommand extends XTestCase { appXml += "</configuration>"; appXml += "</workflow>"; appXml += " <sla:info>" - // + " <sla:client-id>axonite-blue</sla:client-id>" + " <sla:app-name>test-app</sla:app-name>" + " <sla:nominal-time>${coord:nominalTime()}</sla:nominal-time>" + " <sla:should-start>5</sla:should-start>" + " <sla:should-end>120</sla:should-end>" - + " <sla:notification-msg>Notifying User for ${coord:nominalTime()} nominal time </sla:notification-msg>" - + " <sla:alert-contact>[email protected]</sla:alert-contact>" + + " <sla:notification-msg>Notifying User for ${coord:nominalTime()},${coord:actualTime()}," + + "${coord:formatTime(coord:nominalTime(),'yyyy-MM-dd')},${coord:dateOffset(coord:nominalTime(), 1, 'DAY')}," + + "${coord:actionId()},${coord:name()},${coord:conf('testProperty')},${coord:user()},${coord:dataOut('LOCAL_A')}" + + "${coord:databaseOut('aggregated-logs')},${coord:tableOut('aggregated-logs')}," + + "${coord:dataOutPartitions('aggregated-logs')}" + + "</sla:notification-msg>" + " <sla:alert-contact>[email protected]</sla:alert-contact>" + " <sla:dev-contact>[email protected]</sla:dev-contact>" - + " <sla:qa-contact>[email protected]</sla:qa-contact>" + " <sla:se-contact>[email protected]</sla:se-contact>" - + "</sla:info>"; + + " <sla:qa-contact>[email protected]</sla:qa-contact>" + + " <sla:se-contact>[email protected]</sla:se-contact>" + "</sla:info>"; appXml += "</action>"; appXml += "</coordinator-app>"; /*try { http://git-wip-us.apache.org/repos/asf/oozie/blob/5045f89c/core/src/test/java/org/apache/oozie/command/coord/TestCoordSubmitXCommand.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/oozie/command/coord/TestCoordSubmitXCommand.java b/core/src/test/java/org/apache/oozie/command/coord/TestCoordSubmitXCommand.java index 8dc0c44..019c12c 100644 --- a/core/src/test/java/org/apache/oozie/command/coord/TestCoordSubmitXCommand.java +++ b/core/src/test/java/org/apache/oozie/command/coord/TestCoordSubmitXCommand.java @@ -615,11 +615,17 @@ public class TestCoordSubmitXCommand extends XDataTestCase { + "timezone=\"UTC\"> <uri-template>" + getTestCaseFileUri("coord/workflows/${YEAR}/${DAY}") + "</uri-template> </dataset> " + "<dataset name=\"local_a\" frequency=\"${coord:days(7)}\" initial-instance=\"2009-02-01T01:00Z\" " + "timezone=\"UTC\"> <uri-template>" + getTestCaseFileUri("coord/workflows/${YEAR}/${DAY}") + "</uri-template> </dataset> " + + "<dataset name=\"Stats\" frequency=\"${coord:days(1)}\" initial-instance=\"2009-01-01T01:00Z\" " + + "timezone=\"UTC\"><uri-template>hcat://foo:11002/myOutputDatabase/myOutputTable/datestamp=${YEAR}${MONTH}${DAY}" + + "</uri-template></dataset>" + "</datasets> <input-events> " + "<data-in name=\"A\" dataset=\"a\"> <instance>${coord:latest(0)}</instance> </data-in> " + "</input-events> " + "<output-events> <data-out name=\"LOCAL_A\" dataset=\"local_a\"> " - + "<instance>${coord:current(-1)}</instance> </data-out> </output-events> <action> <workflow> <app-path>hdfs:///tmp/workflows/</app-path> " + + "<instance>${coord:current(-1)}</instance> </data-out> " + + "<data-out name=\"aggregated-logs\" dataset=\"Stats\">" + + "<instance>${coord:current(0)}</instance></data-out>" + + "</output-events> <action> <workflow> <app-path>hdfs:///tmp/workflows/</app-path> " + "<configuration> <property> <name>inputA</name> <value>${coord:dataIn('A')}</value> </property> " + "<property> <name>inputB</name> <value>${coord:dataOut('LOCAL_A')}</value> " + "</property></configuration> </workflow> " @@ -628,7 +634,12 @@ public class TestCoordSubmitXCommand extends XDataTestCase { + " <sla:nominal-time>${coord:nominalTime()}</sla:nominal-time>" + " <sla:should-start>${5 * MINUTES}</sla:should-start>" + " <sla:should-end>${ SLA_OFFSET * HOURS}</sla:should-end>" - + " <sla:notification-msg>Notifying User for ${coord:nominalTime()} nominal time </sla:notification-msg>" + + " <sla:notification-msg>Notifying User for ${coord:nominalTime()}, ${coord:actualTime()}," + + "${coord:formatTime(coord:nominalTime(),'yyyy-MM-dd')},${coord:dateOffset(coord:nominalTime(), 1, 'DAY')}" + + "${coord:actionId()},${coord:name()}, ${coord:conf('nameNode')},${coord:user()},${coord:dataOut('LOCAL_A')}" + + "${coord:databaseOut('aggregated-logs')},${coord:tableOut('aggregated-logs')}," + + "${coord:dataOutPartitions('aggregated-logs')}" + + "</sla:notification-msg>" + " <sla:alert-contact>[email protected]</sla:alert-contact>" + " <sla:dev-contact>[email protected]</sla:dev-contact>" + " <sla:qa-contact>[email protected]</sla:qa-contact>" http://git-wip-us.apache.org/repos/asf/oozie/blob/5045f89c/core/src/test/java/org/apache/oozie/coord/TestCoordELFunctions.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/oozie/coord/TestCoordELFunctions.java b/core/src/test/java/org/apache/oozie/coord/TestCoordELFunctions.java index 34a428f..be35ce4 100644 --- a/core/src/test/java/org/apache/oozie/coord/TestCoordELFunctions.java +++ b/core/src/test/java/org/apache/oozie/coord/TestCoordELFunctions.java @@ -863,6 +863,9 @@ public class TestCoordELFunctions extends XTestCase { init("coord-job-submit-data"); eval.setVariable("date", utcDate); assertEquals(expr3_eval, CoordELFunctions.evalAndWrap(eval, expr3)); + init("coord-sla-submit"); + eval.setVariable("date", utcDate); + assertEquals(expr3_eval, CoordELFunctions.evalAndWrap(eval, expr3)); } public void testFuture() throws Exception { @@ -899,6 +902,8 @@ public class TestCoordELFunctions extends XTestCase { init("coord-action-start"); expr = "${coord:nominalTime()}"; assertEquals("2009-09-09T23:59Z", CoordELFunctions.evalAndWrap(eval, expr)); + init("coord-sla-create"); + assertEquals("2009-09-09T23:59Z", CoordELFunctions.evalAndWrap(eval, expr)); } public void testActualTime() throws Exception { @@ -907,6 +912,11 @@ public class TestCoordELFunctions extends XTestCase { init("coord-action-start"); expr = "${coord:actualTime()}"; assertEquals("2009-09-10T23:59Z", CoordELFunctions.evalAndWrap(eval, expr)); + init("coord-sla-submit"); + assertEquals(expr, CoordELFunctions.evalAndWrap(eval, expr)); + init("coord-sla-create"); + assertEquals("2009-09-10T23:59Z", CoordELFunctions.evalAndWrap(eval, expr)); + } public void testDataIn() throws Exception { @@ -927,12 +937,18 @@ public class TestCoordELFunctions extends XTestCase { String expr = "${coord:dataOut('ABC')}"; assertEquals("file:///tmp/coord/US/2009/1/30,file:///tmp/coord/US/2009/1/31", CoordELFunctions.evalAndWrap(eval, expr)); + init("coord-sla-create"); + eval.setVariable(".dataout.ABC", "file:///tmp/coord/US/2009/1/30,file:///tmp/coord/US/2009/1/31"); + assertEquals("file:///tmp/coord/US/2009/1/30,file:///tmp/coord/US/2009/1/31", + CoordELFunctions.evalAndWrap(eval, expr)); } public void testActionId() throws Exception { init("coord-action-start"); String expr = "${coord:actionId()}"; assertEquals("00000-oozie-C@1", CoordELFunctions.evalAndWrap(eval, expr)); + init("coord-sla-create"); + assertEquals("00000-oozie-C@1", CoordELFunctions.evalAndWrap(eval, expr)); } public void testName() throws Exception { http://git-wip-us.apache.org/repos/asf/oozie/blob/5045f89c/core/src/test/java/org/apache/oozie/coord/TestHCatELFunctions.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/oozie/coord/TestHCatELFunctions.java b/core/src/test/java/org/apache/oozie/coord/TestHCatELFunctions.java index f46f1ec..a689cb1 100644 --- a/core/src/test/java/org/apache/oozie/coord/TestHCatELFunctions.java +++ b/core/src/test/java/org/apache/oozie/coord/TestHCatELFunctions.java @@ -148,6 +148,9 @@ public class TestHCatELFunctions extends XHCatTestCase { } catch (Exception ex) { } + init("coord-sla-submit"); + eval.setVariable("oozie.dataname.ABCD", "data-out"); + assertEquals("${coord:databaseOut('ABCD')}", CoordELFunctions.evalAndWrap(eval, expr)); } /** @@ -189,6 +192,11 @@ public class TestHCatELFunctions extends XHCatTestCase { } catch (Exception ex) { } + + init("coord-sla-submit"); + expr = "${coord:tableOut('ABC')}"; + eval.setVariable("oozie.dataname.ABC", "data-out"); + assertEquals("${coord:tableOut('ABC')}", CoordELFunctions.evalAndWrap(eval, expr)); } /** @@ -284,6 +292,9 @@ public class TestHCatELFunctions extends XHCatTestCase { } catch (Exception ex) { } + init("coord-sla-submit"); + eval.setVariable("oozie.dataname.ABCD", "data-out"); + assertEquals("${coord:dataOutPartitions('ABCD')}", CoordELFunctions.evalAndWrap(eval, expr)); } /** @@ -348,6 +359,12 @@ public class TestHCatELFunctions extends XHCatTestCase { eval.setVariable(".dataout.ABC.unresolved", Boolean.FALSE); expr = "${coord:tableOut('ABC')}"; assertEquals("clicks", CoordELFunctions.evalAndWrap(eval, expr)); + + init("coord-sla-create", "hcat://hcat.server.com:5080/mydb/clicks/datastamp=12;region=us"); + eval.setVariable(".dataout.ABC", "hcat://hcat.server.com:5080/mydb/clicks/datastamp=12;region=us"); + eval.setVariable(".dataout.ABC.unresolved", Boolean.FALSE); + expr = "${coord:tableOut('ABC')}"; + assertEquals("clicks", CoordELFunctions.evalAndWrap(eval, expr)); } /** @@ -402,6 +419,12 @@ public class TestHCatELFunctions extends XHCatTestCase { eval.setVariable(".dataout.ABC.unresolved", Boolean.FALSE); String res = CoordELFunctions.evalAndWrap(eval, expr); assertTrue(res.equals("'datastamp=20120230,region=us'") || res.equals("'region=us,datastamp=20120230'")); + + init("coord-sla-create"); + eval.setVariable(".dataout.ABC", "hcat://hcat.server.com:5080/mydb/clicks/datastamp=20130230;region=euro"); + eval.setVariable(".dataout.ABC.unresolved", Boolean.FALSE); + res = CoordELFunctions.evalAndWrap(eval, expr); + assertTrue(res.equals("'datastamp=20130230,region=us'") || res.equals("'region=euro,datastamp=20130230'")); } /** @@ -422,6 +445,16 @@ public class TestHCatELFunctions extends XHCatTestCase { expr = "${coord:dataOutPartitionValue('ABC','region')}"; res = CoordELFunctions.evalAndWrap(eval, expr); assertTrue(res.equals("US")); + + init("coord-sla-create"); + eval.setVariable(".dataout.ABC", "hcat://hcat.server.com:5080/mydb/clicks/datastamp=20120230;region=US"); + eval.setVariable(".dataout.ABC.unresolved", Boolean.FALSE); + expr = "${coord:dataOutPartitionValue('ABC','datastamp')}"; + res = CoordELFunctions.evalAndWrap(eval, expr); + assertTrue(res.equals("20120230")); + expr = "${coord:dataOutPartitionValue('ABC','region')}"; + res = CoordELFunctions.evalAndWrap(eval, expr); + assertTrue(res.equals("US")); } /** http://git-wip-us.apache.org/repos/asf/oozie/blob/5045f89c/release-log.txt ---------------------------------------------------------------------- diff --git a/release-log.txt b/release-log.txt index 1bfa9c2..9673bac 100644 --- a/release-log.txt +++ b/release-log.txt @@ -1,5 +1,6 @@ -- Oozie 4.1.0 release (trunk - unreleased) +OOZIE-1725 add coord EL functions to be used in SLA tag (ryota) OOZIE-1765 JMS Notifications for Workflows not always on the correct topic (rkanter) OOZIE-1732 Sharelib instrumentation fails if sharelib.system.libpath is not created (ryota) OOZIE-1692 modify log message when checking completion of child job in Map-Reduce action (ryota)
