http://git-wip-us.apache.org/repos/asf/oozie/blob/883c7556/core/src/test/java/org/apache/oozie/util/graph/TestGraphGenerator.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/oozie/util/graph/TestGraphGenerator.java b/core/src/test/java/org/apache/oozie/util/graph/TestGraphGenerator.java new file mode 100644 index 0000000..9b0e263 --- /dev/null +++ b/core/src/test/java/org/apache/oozie/util/graph/TestGraphGenerator.java @@ -0,0 +1,227 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.oozie.util.graph; + +import org.apache.oozie.WorkflowActionBean; +import org.apache.oozie.WorkflowJobBean; +import org.apache.oozie.client.WorkflowAction; +import org.apache.oozie.service.Services; +import org.apache.oozie.test.XTestCase; +import org.apache.oozie.util.IOUtils; +import org.junit.Assert; + +import javax.imageio.ImageIO; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.FileReader; +import java.io.IOException; +import java.io.OutputStream; + +public class TestGraphGenerator extends XTestCase { + private static final String GRAPH_WORKFLOW_DECISION_FORK_JOIN_XML = "graph-workflow-decision-fork-join.xml"; + private static final String GRAPH_WORKFLOW_MANY_ACTIONS_XML = "graph-workflow-many-actions.xml"; + private static final String GRAPH_WORKFLOW_SIMPLE_XML = "graph-workflow-simple.xml"; + private static final String GRAPH_WORKFLOW_INVALID_XML = "graph-workflow-invalid.xml"; + + private Services services; + + @Override + protected void setUp() throws Exception { + super.setUp(); + + services = new Services(); + services.init(); + } + + @Override + protected void tearDown() throws Exception { + services.destroy(); + + super.tearDown(); + } + + public void testSimpleGraphPng() { + final WorkflowJobBean jsonWFJob = createSimpleWorkflow(); + + generateAndAssertPng(jsonWFJob, GRAPH_WORKFLOW_SIMPLE_XML, false); + + generateAndAssertPng(jsonWFJob, GRAPH_WORKFLOW_SIMPLE_XML, true); + + try { + final String content = IOUtils.getResourceAsString(GRAPH_WORKFLOW_INVALID_XML, -1); + final GraphGenerator g = new GraphGenerator(content, jsonWFJob, true, new GraphvizRenderer()); + g.write(new NullOutputStream(), OutputFormat.PNG); + } + catch (final Exception e) { + Assert.fail("Write PNG shouldn't have failed for graph-workflow-invalid.xml call: " + e.getMessage()); + } + } + + private WorkflowJobBean createSimpleWorkflow() { + final WorkflowJobBean jsonWFJob = new WorkflowJobBean(); + jsonWFJob.setAppName("My Test App"); + jsonWFJob.setId("My Test ID"); + return jsonWFJob; + } + + private void generateAndAssertPng(final WorkflowJobBean workflowJob, final String path, final boolean showKill) { + File outputPng = null; + try { + outputPng = File.createTempFile("graph-output", path + ".png"); + final String content = IOUtils.getResourceAsString(path, -1); + final GraphGenerator g = new GraphGenerator(content, workflowJob, showKill, new GraphvizRenderer()); + g.write(new FileOutputStream(outputPng), OutputFormat.PNG); + + Assert.assertNotNull("PNG read error", ImageIO.read(new FileInputStream(outputPng))); + } + catch (final Exception e) { + Assert.fail(String.format("Render and write PNG failed for %s: %s", path, e.getMessage())); + } + finally { + if (outputPng != null) { + outputPng.delete(); + } + } + } + + public void testSimpleGraphDot() { + final WorkflowJobBean jsonWFJob = createSimpleWorkflow(); + + File outputDot = null; + try { + outputDot = File.createTempFile("graph-output", "graph-workflow-simple.dot"); + final String content = IOUtils.getResourceAsString("graph-workflow-simple.xml", -1); + final GraphGenerator g = new GraphGenerator(content, jsonWFJob, true, new GraphvizRenderer()); + g.write(new FileOutputStream(outputDot), OutputFormat.DOT); + + final BufferedReader dotReader = new BufferedReader(new FileReader(outputDot)); + Assert.assertTrue("Rendered and written graph output file is not a DOT file", + dotReader.readLine().equals("digraph {")); + } + catch (final Exception e) { + Assert.fail("Render and write DOT failed: " + e.getMessage()); + } + finally { + if (outputDot != null) { + outputDot.delete(); + } + } + } + + public void testSimpleGraphSvg() { + final WorkflowJobBean jsonWFJob = createSimpleWorkflow(); + + File outputDot = null; + try { + outputDot = File.createTempFile("graph-output", "graph-workflow-simple.svg"); + final String content = IOUtils.getResourceAsString("graph-workflow-simple.xml", -1); + final GraphGenerator g = new GraphGenerator(content, jsonWFJob, true, new GraphvizRenderer()); + g.write(new FileOutputStream(outputDot), OutputFormat.SVG); + + final BufferedReader svgReader = new BufferedReader(new FileReader(outputDot)); + Assert.assertTrue("Rendered and written graph output file is not an SVG file", + svgReader.readLine().startsWith("<svg ")); + } + catch (final Exception e) { + Assert.fail("Render and write SVG failed: " + e.getMessage()); + } + finally { + if (outputDot != null) { + outputDot.delete(); + } + } + } + + public void testGraphWithManyNodes() throws Exception { + new GraphGenerator(readXmlFromClasspath(GRAPH_WORKFLOW_MANY_ACTIONS_XML), + createWorkflowInProgress(25), + true, + new GraphvizRenderer()) + .write(new NullOutputStream(), OutputFormat.PNG); + } + + private String readXmlFromClasspath(final String classpathLocation) throws IOException { + return IOUtils.getResourceAsString(classpathLocation, -1); + } + + public void testGraphWithDecisionForkJoin() throws Exception { + new GraphGenerator(readXmlFromClasspath(GRAPH_WORKFLOW_DECISION_FORK_JOIN_XML), + createWorkflowWithDecisionForkJoin(), + true, + new GraphvizRenderer()) + .write(new NullOutputStream(), OutputFormat.PNG); + } + + private WorkflowJobBean createWorkflowInProgress(final int actionNodeCount) { + final WorkflowJobBean workflowJobBean = createSimpleWorkflow(); + + workflowJobBean.getActions().add(createAction("start", "start", WorkflowAction.Status.DONE)); + final int ixRunning = (int) Math.floor(Math.random() * actionNodeCount); + for (int ixNode = 0; ixNode < actionNodeCount; ixNode++) { + final WorkflowAction.Status status; + if (ixNode < ixRunning) { + status = WorkflowAction.Status.DONE; + } + else if (ixNode == ixRunning) { + status = WorkflowAction.Status.RUNNING; + } + else { + status = WorkflowAction.Status.PREP; + } + workflowJobBean.getActions().add(createAction(String.format("pig-%d", ixNode), "pig", status)); + } + workflowJobBean.getActions().add(createAction("kill", "kill", WorkflowAction.Status.PREP)); + workflowJobBean.getActions().add(createAction("end", "end", WorkflowAction.Status.PREP)); + + return workflowJobBean; + } + + private WorkflowJobBean createWorkflowWithDecisionForkJoin() { + final WorkflowJobBean workflowJobBean = createSimpleWorkflow(); + + workflowJobBean.getActions().add(createAction("start", "start", WorkflowAction.Status.DONE)); + workflowJobBean.getActions().add(createAction("decision", "decision", WorkflowAction.Status.DONE)); + workflowJobBean.getActions().add(createAction("pig-0", "pig", WorkflowAction.Status.PREP)); + workflowJobBean.getActions().add(createAction("fork", "fork", WorkflowAction.Status.DONE)); + workflowJobBean.getActions().add(createAction("pig-1", "pig", WorkflowAction.Status.DONE)); + workflowJobBean.getActions().add(createAction("pig-2", "pig", WorkflowAction.Status.RUNNING)); + workflowJobBean.getActions().add(createAction("join", "join", WorkflowAction.Status.PREP)); + workflowJobBean.getActions().add(createAction("kill", "kill", WorkflowAction.Status.PREP)); + workflowJobBean.getActions().add(createAction("end", "end", WorkflowAction.Status.PREP)); + + return workflowJobBean; + } + + private WorkflowAction createAction(final String name, final String type, final WorkflowAction.Status status) { + final WorkflowActionBean workflowActionBean = new WorkflowActionBean(); + workflowActionBean.setName(name); + workflowActionBean.setType(type); + workflowActionBean.setStatus(status); + + return workflowActionBean; + } + + private static class NullOutputStream extends OutputStream { + @Override + public void write(final int b) throws IOException { + } + } +}
http://git-wip-us.apache.org/repos/asf/oozie/blob/883c7556/core/src/test/resources/graph-workflow-decision-fork-join.xml ---------------------------------------------------------------------- diff --git a/core/src/test/resources/graph-workflow-decision-fork-join.xml b/core/src/test/resources/graph-workflow-decision-fork-join.xml new file mode 100644 index 0000000..e511e87 --- /dev/null +++ b/core/src/test/resources/graph-workflow-decision-fork-join.xml @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<workflow-app xmlns="uri:oozie:workflow:0.2" name="sm3-segment-3908-251483"> + <start to="decision"/> + <kill name="kill"> + <message>killed message</message> + </kill> + <decision name="decision"> + <switch> + <case to="pig-0">${true}</case> + <case to="fork">${false}</case> + <default to="end"/> + </switch> + </decision> + <action name="pig-0"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="end"/> + <error to="kill"/> + </action> + <fork name="fork"> + <path start="pig-1"/> + <path start="pig-2"/> + </fork> + <action name="pig-1"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="join"/> + <error to="kill"/> + </action> + <action name="pig-2"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="join"/> + <error to="kill"/> + </action> + <join name="join" to="end" /> + <end name="end"/> +</workflow-app> http://git-wip-us.apache.org/repos/asf/oozie/blob/883c7556/core/src/test/resources/graph-workflow-invalid.xml ---------------------------------------------------------------------- diff --git a/core/src/test/resources/graph-workflow-invalid.xml b/core/src/test/resources/graph-workflow-invalid.xml new file mode 100644 index 0000000..8103bca --- /dev/null +++ b/core/src/test/resources/graph-workflow-invalid.xml @@ -0,0 +1,507 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<workflow-app xmlns="uri:oozie:workflow:0.2" name="sm3-segment-3908-251483"> + <start to="or_0_1"/> + <kill name="kill"> + <message>killed message</message> + </kill> + <action name="or_0_1"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <prepare> + <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_0_1"/> + </prepare> + <configuration> + <property> + <name>mapreduce.reduce.input.limit</name> + <value>-1</value> + </property> + <property> + <name>mapred.job.queue.name</name> + <value>${queueName}</value> + </property> + <property> + <name>mapreduce.job.acl-view-job</name> + <value>${SM_H20S_VIEWJOB}</value> + </property> + <property> + <name>oozie.launcher.mapreduce.job.acl-view-job</name> + <value>${SM_H20S_VIEWJOB}</value> + </property> + <property> + <name>mapred.map.tasks.speculative.execution</name> + <value>false</value> + </property> + <property> + <name>mapred.reduce.tasks.speculative.execution</name> + <value>false</value> + </property> + <property> + <name>oozie.launcher.mapred.child.java.opts</name> + <value>${OOZIE_LAUNCHER_MAPRED_CHILD_JAVA_OPTS}</value> + </property> + <property> + <name>SM3.DUMMYSID</name> + <value>FALSE</value> + </property> + </configuration> + <script>script/pig/sm3-segment-3908-251483-or_0_1.pig</script> + <param>REDUCERS=15</param> + <param>OUTPUT=/projects/sm3/root/request/251483/output/pig/or_0_1</param> + <param>INPUT1=/projects/sm3/root/segment/235/2/20120308_20120308</param> + <param>USERTYPE1=yuid</param> + <param>INPUT2=/projects/sm3/root/segment/236/2/20120308_20120308</param> + <param>USERTYPE2=yuid</param> + </pig> + <ok to="or_or_0_1_2"/> + <error to="kill"/> + </action> + <action name="or_or_0_1_2"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <prepare> + <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_or_0_1_2"/> + </prepare> + <configuration> + <property> + <name>mapreduce.reduce.input.limit</name> + <value>-1</value> + </property> + <property> + <name>mapred.job.queue.name</name> + <value>${queueName}</value> + </property> + <property> + <name>mapreduce.job.acl-view-job</name> + <value>${SM_H20S_VIEWJOB}</value> + </property> + <property> + <name>oozie.launcher.mapreduce.job.acl-view-job</name> + <value>${SM_H20S_VIEWJOB}</value> + </property> + <property> + <name>mapred.map.tasks.speculative.execution</name> + <value>false</value> + </property> + <property> + <name>mapred.reduce.tasks.speculative.execution</name> + <value>false</value> + </property> + <property> + <name>oozie.launcher.mapred.child.java.opts</name> + <value>${OOZIE_LAUNCHER_MAPRED_CHILD_JAVA_OPTS}</value> + </property> + <property> + <name>SM3.DUMMYSID</name> + <value>FALSE</value> + </property> + </configuration> + <script>script/pig/sm3-segment-3908-251483-or_or_0_1_2.pig</script> + <param>REDUCERS=15</param> + <param>OUTPUT=/projects/sm3/root/request/251483/output/pig/or_or_0_1_2</param> + <param>INPUT1=/projects/sm3/root/request/251483/output/pig/or_0_1</param> + <param>USERTYPE1=yuid</param> + <param>INPUT2=/projects/sm3/root/segment/237/2/20120308_20120308</param> + <param>USERTYPE2=yuid</param> + </pig> + <ok to="or_or_0_1_3"/> + <error to="kill"/> + </action> + <action name="or_or_0_1_3"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <prepare> + <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_or_0_1_3"/> + </prepare> + <configuration> + <property> + <name>mapreduce.reduce.input.limit</name> + <value>-1</value> + </property> + <property> + <name>mapred.job.queue.name</name> + <value>${queueName}</value> + </property> + <property> + <name>mapreduce.job.acl-view-job</name> + <value>${SM_H20S_VIEWJOB}</value> + </property> + <property> + <name>oozie.launcher.mapreduce.job.acl-view-job</name> + <value>${SM_H20S_VIEWJOB}</value> + </property> + <property> + <name>mapred.map.tasks.speculative.execution</name> + <value>false</value> + </property> + <property> + <name>mapred.reduce.tasks.speculative.execution</name> + <value>false</value> + </property> + <property> + <name>oozie.launcher.mapred.child.java.opts</name> + <value>${OOZIE_LAUNCHER_MAPRED_CHILD_JAVA_OPTS}</value> + </property> + <property> + <name>SM3.DUMMYSID</name> + <value>FALSE</value> + </property> + </configuration> + <script>script/pig/sm3-segment-3908-251483-or_or_0_1_3.pig</script> + <param>REDUCERS=15</param> + <param>OUTPUT=/projects/sm3/root/request/251483/output/pig/or_or_0_1_3</param> + <param>INPUT1=/projects/sm3/root/request/251483/output/pig/or_or_0_1_2</param> + <param>USERTYPE1=yuid</param> + <param>INPUT2=/projects/sm3/root/segment/238/2/20120308_20120308</param> + <param>USERTYPE2=yuid</param> + </pig> + <ok to="or_or_0_1_4"/> + <error to="kill"/> + </action> + <action name="or_or_0_1_4"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <prepare> + <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_or_0_1_4"/> + </prepare> + <configuration> + <property> + <name>mapreduce.reduce.input.limit</name> + <value>-1</value> + </property> + <property> + <name>mapred.job.queue.name</name> + <value>${queueName}</value> + </property> + <property> + <name>mapreduce.job.acl-view-job</name> + <value>${SM_H20S_VIEWJOB}</value> + </property> + <property> + <name>oozie.launcher.mapreduce.job.acl-view-job</name> + <value>${SM_H20S_VIEWJOB}</value> + </property> + <property> + <name>mapred.map.tasks.speculative.execution</name> + <value>false</value> + </property> + <property> + <name>mapred.reduce.tasks.speculative.execution</name> + <value>false</value> + </property> + <property> + <name>oozie.launcher.mapred.child.java.opts</name> + <value>${OOZIE_LAUNCHER_MAPRED_CHILD_JAVA_OPTS}</value> + </property> + <property> + <name>SM3.DUMMYSID</name> + <value>FALSE</value> + </property> + </configuration> + <script>script/pig/sm3-segment-3908-251483-or_or_0_1_4.pig</script> + <param>REDUCERS=15</param> + <param>OUTPUT=/projects/sm3/root/request/251483/output/pig/or_or_0_1_4</param> + <param>INPUT1=/projects/sm3/root/request/251483/output/pig/or_or_0_1_3</param> + <param>USERTYPE1=yuid</param> + <param>INPUT2=/projects/sm3/root/segment/239/2/20120308_20120308</param> + <param>USERTYPE2=yuid</param> + </pig> + <ok to="or_or_0_1_5"/> + <error to="kill"/> + </action> + <action name="or_or_0_1_5"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <prepare> + <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_or_0_1_5"/> + </prepare> + <configuration> + <property> + <name>mapreduce.reduce.input.limit</name> + <value>-1</value> + </property> + <property> + <name>mapred.job.queue.name</name> + <value>${queueName}</value> + </property> + <property> + <name>mapreduce.job.acl-view-job</name> + <value>${SM_H20S_VIEWJOB}</value> + </property> + <property> + <name>oozie.launcher.mapreduce.job.acl-view-job</name> + <value>${SM_H20S_VIEWJOB}</value> + </property> + <property> + <name>mapred.map.tasks.speculative.execution</name> + <value>false</value> + </property> + <property> + <name>mapred.reduce.tasks.speculative.execution</name> + <value>false</value> + </property> + <property> + <name>oozie.launcher.mapred.child.java.opts</name> + <value>${OOZIE_LAUNCHER_MAPRED_CHILD_JAVA_OPTS}</value> + </property> + <property> + <name>SM3.DUMMYSID</name> + <value>FALSE</value> + </property> + </configuration> + <script>script/pig/sm3-segment-3908-251483-or_or_0_1_5.pig</script> + <param>REDUCERS=15</param> + <param>OUTPUT=/projects/sm3/root/request/251483/output/pig/or_or_0_1_5</param> + <param>INPUT1=/projects/sm3/root/request/251483/output/pig/or_or_0_1_4</param> + <param>USERTYPE1=yuid</param> + <param>INPUT2=/projects/sm3/root/segment/240/2/20120308_20120308</param> + <param>USERTYPE2=yuid</param> + </pig> + <ok to="or_or_0_1_6_bad"/> + <error to="kill"/> + </action> + <action name="or_or_0_1_6"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <prepare> + <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_or_0_1_6"/> + </prepare> + <configuration> + <property> + <name>mapreduce.reduce.input.limit</name> + <value>-1</value> + </property> + <property> + <name>mapred.job.queue.name</name> + <value>${queueName}</value> + </property> + <property> + <name>mapreduce.job.acl-view-job</name> + <value>${SM_H20S_VIEWJOB}</value> + </property> + <property> + <name>oozie.launcher.mapreduce.job.acl-view-job</name> + <value>${SM_H20S_VIEWJOB}</value> + </property> + <property> + <name>mapred.map.tasks.speculative.execution</name> + <value>false</value> + </property> + <property> + <name>mapred.reduce.tasks.speculative.execution</name> + <value>false</value> + </property> + <property> + <name>oozie.launcher.mapred.child.java.opts</name> + <value>${OOZIE_LAUNCHER_MAPRED_CHILD_JAVA_OPTS}</value> + </property> + <property> + <name>SM3.DUMMYSID</name> + <value>FALSE</value> + </property> + </configuration> + <script>script/pig/sm3-segment-3908-251483-or_or_0_1_6.pig</script> + <param>REDUCERS=15</param> + <param>OUTPUT=/projects/sm3/root/request/251483/output/pig/or_or_0_1_6</param> + <param>INPUT1=/projects/sm3/root/request/251483/output/pig/or_or_0_1_5</param> + <param>USERTYPE1=yuid</param> + <param>INPUT2=/projects/sm3/root/segment/241/2/20120308_20120308</param> + <param>USERTYPE2=yuid</param> + </pig> + <ok to="or_or_0_1_7"/> + <error to="kill"/> + </action> + <action name="or_or_0_1_7"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <prepare> + <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_or_0_1_7"/> + </prepare> + <configuration> + <property> + <name>mapreduce.reduce.input.limit</name> + <value>-1</value> + </property> + <property> + <name>mapred.job.queue.name</name> + <value>${queueName}</value> + </property> + <property> + <name>mapreduce.job.acl-view-job</name> + <value>${SM_H20S_VIEWJOB}</value> + </property> + <property> + <name>oozie.launcher.mapreduce.job.acl-view-job</name> + <value>${SM_H20S_VIEWJOB}</value> + </property> + <property> + <name>mapred.map.tasks.speculative.execution</name> + <value>false</value> + </property> + <property> + <name>mapred.reduce.tasks.speculative.execution</name> + <value>false</value> + </property> + <property> + <name>oozie.launcher.mapred.child.java.opts</name> + <value>${OOZIE_LAUNCHER_MAPRED_CHILD_JAVA_OPTS}</value> + </property> + <property> + <name>SM3.DUMMYSID</name> + <value>FALSE</value> + </property> + </configuration> + <script>script/pig/sm3-segment-3908-251483-or_or_0_1_7.pig</script> + <param>REDUCERS=15</param> + <param>OUTPUT=/projects/sm3/root/request/251483/output/pig/or_or_0_1_7</param> + <param>INPUT1=/projects/sm3/root/request/251483/output/pig/or_or_0_1_6</param> + <param>USERTYPE1=yuid</param> + <param>INPUT2=/projects/sm3/root/segment/242/2/20120308_20120308</param> + <param>USERTYPE2=yuid</param> + </pig> + <ok to="or_or_0_1_8"/> + <error to="kill"/> + </action> + <action name="or_or_0_1_8"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <prepare> + <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_or_0_1_8"/> + </prepare> + <configuration> + <property> + <name>mapreduce.reduce.input.limit</name> + <value>-1</value> + </property> + <property> + <name>mapred.job.queue.name</name> + <value>${queueName}</value> + </property> + <property> + <name>mapreduce.job.acl-view-job</name> + <value>${SM_H20S_VIEWJOB}</value> + </property> + <property> + <name>oozie.launcher.mapreduce.job.acl-view-job</name> + <value>${SM_H20S_VIEWJOB}</value> + </property> + <property> + <name>mapred.map.tasks.speculative.execution</name> + <value>false</value> + </property> + <property> + <name>mapred.reduce.tasks.speculative.execution</name> + <value>false</value> + </property> + <property> + <name>oozie.launcher.mapred.child.java.opts</name> + <value>${OOZIE_LAUNCHER_MAPRED_CHILD_JAVA_OPTS}</value> + </property> + <property> + <name>SM3.DUMMYSID</name> + <value>FALSE</value> + </property> + </configuration> + <script>script/pig/sm3-segment-3908-251483-or_or_0_1_8.pig</script> + <param>REDUCERS=15</param> + <param>OUTPUT=/projects/sm3/root/request/251483/output/pig/or_or_0_1_8</param> + <param>INPUT1=/projects/sm3/root/request/251483/output/pig/or_or_0_1_7</param> + <param>USERTYPE1=yuid</param> + <param>INPUT2=/projects/sm3/root/segment/243/2/20120308_20120308</param> + <param>USERTYPE2=yuid</param> + </pig> + <ok to="or_or_0_1_9"/> + <error to="kill"/> + </action> + <action name="or_or_0_1_9"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <prepare> + <delete path="${nameNode}/projects/sm3/root/segment/3908/8/20120308_20120308"/> + </prepare> + <configuration> + <property> + <name>mapreduce.reduce.input.limit</name> + <value>-1</value> + </property> + <property> + <name>mapred.job.queue.name</name> + <value>${queueName}</value> + </property> + <property> + <name>mapreduce.job.acl-view-job</name> + <value>${SM_H20S_VIEWJOB}</value> + </property> + <property> + <name>oozie.launcher.mapreduce.job.acl-view-job</name> + <value>${SM_H20S_VIEWJOB}</value> + </property> + <property> + <name>mapred.map.tasks.speculative.execution</name> + <value>false</value> + </property> + <property> + <name>mapred.reduce.tasks.speculative.execution</name> + <value>false</value> + </property> + <property> + <name>oozie.launcher.mapred.child.java.opts</name> + <value>${OOZIE_LAUNCHER_MAPRED_CHILD_JAVA_OPTS}</value> + </property> + <property> + <name>SM3.DUMMYSID</name> + <value>FALSE</value> + </property> + </configuration> + <script>script/pig/sm3-segment-3908-251483-or_or_0_1_9.pig</script> + <param>REDUCERS=15</param> + <param>OUTPUT=/projects/sm3/root/segment/3908/8/20120308_20120308</param> + <param>INPUT1=/projects/sm3/root/request/251483/output/pig/or_or_0_1_8</param> + <param>USERTYPE1=yuid</param> + <param>INPUT2=/projects/sm3/root/segment/244/2/20120308_20120308</param> + <param>USERTYPE2=yuid</param> + </pig> + <ok to="cleanup"/> + <error to="kill"/> + </action> + <action name="cleanup"> + <fs> + <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_0_1"/> + <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_or_0_1_2"/> + <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_or_0_1_3"/> + <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_or_0_1_4"/> + <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_or_0_1_5"/> + <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_or_0_1_6"/> + <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_or_0_1_7"/> + <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_or_0_1_8"/> + </fs> + <ok to="end"/> + <error to="kill"/> + </action> + <end name="end"/> +</workflow-app> http://git-wip-us.apache.org/repos/asf/oozie/blob/883c7556/core/src/test/resources/graph-workflow-many-actions.xml ---------------------------------------------------------------------- diff --git a/core/src/test/resources/graph-workflow-many-actions.xml b/core/src/test/resources/graph-workflow-many-actions.xml new file mode 100644 index 0000000..6db8830 --- /dev/null +++ b/core/src/test/resources/graph-workflow-many-actions.xml @@ -0,0 +1,267 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor + license agreements. See the NOTICE file distributed with this work for additional + information regarding copyright ownership. The ASF licenses this file to + you under the Apache License, Version 2.0 (the "License"); you may not use + this file except in compliance with the License. You may obtain a copy of + the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required + by applicable law or agreed to in writing, software distributed under the + License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + OF ANY KIND, either express or implied. See the License for the specific + language governing permissions and limitations under the License. --> +<workflow-app xmlns="uri:oozie:workflow:0.2" name="sm3-segment-3908-251483"> + <start to="pig-0" /> + <kill name="kill"> + <message>killed message</message> + </kill> + <action name="pig-0"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-1" /> + <error to="kill" /> + </action> + + <action name="pig-1"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-2" /> + <error to="kill" /> + </action> + + <action name="pig-2"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-3" /> + <error to="kill" /> + </action> + + <action name="pig-3"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-4" /> + <error to="kill" /> + </action> + + <action name="pig-4"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-5" /> + <error to="kill" /> + </action> + + <action name="pig-5"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-6" /> + <error to="kill" /> + </action> + + <action name="pig-6"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-7" /> + <error to="kill" /> + </action> + + <action name="pig-7"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-8" /> + <error to="kill" /> + </action> + + <action name="pig-8"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-9" /> + <error to="kill" /> + </action> + + <action name="pig-9"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-10" /> + <error to="kill" /> + </action> + + <action name="pig-10"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-11" /> + <error to="kill" /> + </action> + + <action name="pig-11"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-12" /> + <error to="kill" /> + </action> + + <action name="pig-12"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-13" /> + <error to="kill" /> + </action> + + <action name="pig-13"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-14" /> + <error to="kill" /> + </action> + + <action name="pig-14"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-15" /> + <error to="kill" /> + </action> + + <action name="pig-15"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-16" /> + <error to="kill" /> + </action> + + <action name="pig-16"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-17" /> + <error to="kill" /> + </action> + + <action name="pig-17"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-18" /> + <error to="kill" /> + </action> + + <action name="pig-18"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-19" /> + <error to="kill" /> + </action> + + <action name="pig-19"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-20" /> + <error to="kill" /> + </action> + + <action name="pig-20"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-21" /> + <error to="kill" /> + </action> + + <action name="pig-21"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-22" /> + <error to="kill" /> + </action> + + <action name="pig-22"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-23" /> + <error to="kill" /> + </action> + + <action name="pig-23"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-24" /> + <error to="kill" /> + </action> + + <action name="pig-24"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="end" /> + <error to="kill" /> + </action> + <end name="end" /> +</workflow-app> http://git-wip-us.apache.org/repos/asf/oozie/blob/883c7556/core/src/test/resources/graph-workflow-simple.xml ---------------------------------------------------------------------- diff --git a/core/src/test/resources/graph-workflow-simple.xml b/core/src/test/resources/graph-workflow-simple.xml new file mode 100644 index 0000000..01bb889 --- /dev/null +++ b/core/src/test/resources/graph-workflow-simple.xml @@ -0,0 +1,115 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<workflow-app xmlns="uri:oozie:workflow:0.2" name="sm3-segment-3908-251483"> + <start to="pig-0"/> + <kill name="kill"> + <message>killed message</message> + </kill> + <action name="pig-0"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-1"/> + <error to="kill"/> + </action> + <action name="pig-1"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-2"/> + <error to="kill"/> + </action> + <action name="pig-2"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-3"/> + <error to="kill"/> + </action> + <action name="pig-3"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-4"/> + <error to="kill"/> + </action> + <action name="pig-4"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-5"/> + <error to="kill"/> + </action> + <action name="pig-5"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-6"/> + <error to="kill"/> + </action> + <action name="pig-6"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-7"/> + <error to="kill"/> + </action> + <action name="pig-7"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-8"/> + <error to="kill"/> + </action> + <action name="pig-8"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="pig-9"/> + <error to="kill"/> + </action> + <action name="pig-9"> + <pig> + <job-tracker>${jobTracker}</job-tracker> + <name-node>${nameNode}</name-node> + <script>echo.pig</script> + </pig> + <ok to="end"/> + <error to="kill"/> + </action> + <end name="end"/> +</workflow-app> http://git-wip-us.apache.org/repos/asf/oozie/blob/883c7556/core/src/test/resources/graphWF.xml ---------------------------------------------------------------------- diff --git a/core/src/test/resources/graphWF.xml b/core/src/test/resources/graphWF.xml deleted file mode 100644 index 6a7b042..0000000 --- a/core/src/test/resources/graphWF.xml +++ /dev/null @@ -1,507 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<!-- - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> -<workflow-app xmlns="uri:oozie:workflow:0.2" name="sm3-segment-3908-251483"> - <start to="or_0_1"/> - <kill name="kill"> - <message>killed message</message> - </kill> - <action name="or_0_1"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <prepare> - <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_0_1"/> - </prepare> - <configuration> - <property> - <name>mapreduce.reduce.input.limit</name> - <value>-1</value> - </property> - <property> - <name>mapred.job.queue.name</name> - <value>${queueName}</value> - </property> - <property> - <name>mapreduce.job.acl-view-job</name> - <value>${SM_H20S_VIEWJOB}</value> - </property> - <property> - <name>oozie.launcher.mapreduce.job.acl-view-job</name> - <value>${SM_H20S_VIEWJOB}</value> - </property> - <property> - <name>mapred.map.tasks.speculative.execution</name> - <value>false</value> - </property> - <property> - <name>mapred.reduce.tasks.speculative.execution</name> - <value>false</value> - </property> - <property> - <name>oozie.launcher.mapred.child.java.opts</name> - <value>${OOZIE_LAUNCHER_MAPRED_CHILD_JAVA_OPTS}</value> - </property> - <property> - <name>SM3.DUMMYSID</name> - <value>FALSE</value> - </property> - </configuration> - <script>script/pig/sm3-segment-3908-251483-or_0_1.pig</script> - <param>REDUCERS=15</param> - <param>OUTPUT=/projects/sm3/root/request/251483/output/pig/or_0_1</param> - <param>INPUT1=/projects/sm3/root/segment/235/2/20120308_20120308</param> - <param>USERTYPE1=yuid</param> - <param>INPUT2=/projects/sm3/root/segment/236/2/20120308_20120308</param> - <param>USERTYPE2=yuid</param> - </pig> - <ok to="or_or_0_1_2"/> - <error to="kill"/> - </action> - <action name="or_or_0_1_2"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <prepare> - <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_or_0_1_2"/> - </prepare> - <configuration> - <property> - <name>mapreduce.reduce.input.limit</name> - <value>-1</value> - </property> - <property> - <name>mapred.job.queue.name</name> - <value>${queueName}</value> - </property> - <property> - <name>mapreduce.job.acl-view-job</name> - <value>${SM_H20S_VIEWJOB}</value> - </property> - <property> - <name>oozie.launcher.mapreduce.job.acl-view-job</name> - <value>${SM_H20S_VIEWJOB}</value> - </property> - <property> - <name>mapred.map.tasks.speculative.execution</name> - <value>false</value> - </property> - <property> - <name>mapred.reduce.tasks.speculative.execution</name> - <value>false</value> - </property> - <property> - <name>oozie.launcher.mapred.child.java.opts</name> - <value>${OOZIE_LAUNCHER_MAPRED_CHILD_JAVA_OPTS}</value> - </property> - <property> - <name>SM3.DUMMYSID</name> - <value>FALSE</value> - </property> - </configuration> - <script>script/pig/sm3-segment-3908-251483-or_or_0_1_2.pig</script> - <param>REDUCERS=15</param> - <param>OUTPUT=/projects/sm3/root/request/251483/output/pig/or_or_0_1_2</param> - <param>INPUT1=/projects/sm3/root/request/251483/output/pig/or_0_1</param> - <param>USERTYPE1=yuid</param> - <param>INPUT2=/projects/sm3/root/segment/237/2/20120308_20120308</param> - <param>USERTYPE2=yuid</param> - </pig> - <ok to="or_or_0_1_3"/> - <error to="kill"/> - </action> - <action name="or_or_0_1_3"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <prepare> - <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_or_0_1_3"/> - </prepare> - <configuration> - <property> - <name>mapreduce.reduce.input.limit</name> - <value>-1</value> - </property> - <property> - <name>mapred.job.queue.name</name> - <value>${queueName}</value> - </property> - <property> - <name>mapreduce.job.acl-view-job</name> - <value>${SM_H20S_VIEWJOB}</value> - </property> - <property> - <name>oozie.launcher.mapreduce.job.acl-view-job</name> - <value>${SM_H20S_VIEWJOB}</value> - </property> - <property> - <name>mapred.map.tasks.speculative.execution</name> - <value>false</value> - </property> - <property> - <name>mapred.reduce.tasks.speculative.execution</name> - <value>false</value> - </property> - <property> - <name>oozie.launcher.mapred.child.java.opts</name> - <value>${OOZIE_LAUNCHER_MAPRED_CHILD_JAVA_OPTS}</value> - </property> - <property> - <name>SM3.DUMMYSID</name> - <value>FALSE</value> - </property> - </configuration> - <script>script/pig/sm3-segment-3908-251483-or_or_0_1_3.pig</script> - <param>REDUCERS=15</param> - <param>OUTPUT=/projects/sm3/root/request/251483/output/pig/or_or_0_1_3</param> - <param>INPUT1=/projects/sm3/root/request/251483/output/pig/or_or_0_1_2</param> - <param>USERTYPE1=yuid</param> - <param>INPUT2=/projects/sm3/root/segment/238/2/20120308_20120308</param> - <param>USERTYPE2=yuid</param> - </pig> - <ok to="or_or_0_1_4"/> - <error to="kill"/> - </action> - <action name="or_or_0_1_4"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <prepare> - <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_or_0_1_4"/> - </prepare> - <configuration> - <property> - <name>mapreduce.reduce.input.limit</name> - <value>-1</value> - </property> - <property> - <name>mapred.job.queue.name</name> - <value>${queueName}</value> - </property> - <property> - <name>mapreduce.job.acl-view-job</name> - <value>${SM_H20S_VIEWJOB}</value> - </property> - <property> - <name>oozie.launcher.mapreduce.job.acl-view-job</name> - <value>${SM_H20S_VIEWJOB}</value> - </property> - <property> - <name>mapred.map.tasks.speculative.execution</name> - <value>false</value> - </property> - <property> - <name>mapred.reduce.tasks.speculative.execution</name> - <value>false</value> - </property> - <property> - <name>oozie.launcher.mapred.child.java.opts</name> - <value>${OOZIE_LAUNCHER_MAPRED_CHILD_JAVA_OPTS}</value> - </property> - <property> - <name>SM3.DUMMYSID</name> - <value>FALSE</value> - </property> - </configuration> - <script>script/pig/sm3-segment-3908-251483-or_or_0_1_4.pig</script> - <param>REDUCERS=15</param> - <param>OUTPUT=/projects/sm3/root/request/251483/output/pig/or_or_0_1_4</param> - <param>INPUT1=/projects/sm3/root/request/251483/output/pig/or_or_0_1_3</param> - <param>USERTYPE1=yuid</param> - <param>INPUT2=/projects/sm3/root/segment/239/2/20120308_20120308</param> - <param>USERTYPE2=yuid</param> - </pig> - <ok to="or_or_0_1_5"/> - <error to="kill"/> - </action> - <action name="or_or_0_1_5"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <prepare> - <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_or_0_1_5"/> - </prepare> - <configuration> - <property> - <name>mapreduce.reduce.input.limit</name> - <value>-1</value> - </property> - <property> - <name>mapred.job.queue.name</name> - <value>${queueName}</value> - </property> - <property> - <name>mapreduce.job.acl-view-job</name> - <value>${SM_H20S_VIEWJOB}</value> - </property> - <property> - <name>oozie.launcher.mapreduce.job.acl-view-job</name> - <value>${SM_H20S_VIEWJOB}</value> - </property> - <property> - <name>mapred.map.tasks.speculative.execution</name> - <value>false</value> - </property> - <property> - <name>mapred.reduce.tasks.speculative.execution</name> - <value>false</value> - </property> - <property> - <name>oozie.launcher.mapred.child.java.opts</name> - <value>${OOZIE_LAUNCHER_MAPRED_CHILD_JAVA_OPTS}</value> - </property> - <property> - <name>SM3.DUMMYSID</name> - <value>FALSE</value> - </property> - </configuration> - <script>script/pig/sm3-segment-3908-251483-or_or_0_1_5.pig</script> - <param>REDUCERS=15</param> - <param>OUTPUT=/projects/sm3/root/request/251483/output/pig/or_or_0_1_5</param> - <param>INPUT1=/projects/sm3/root/request/251483/output/pig/or_or_0_1_4</param> - <param>USERTYPE1=yuid</param> - <param>INPUT2=/projects/sm3/root/segment/240/2/20120308_20120308</param> - <param>USERTYPE2=yuid</param> - </pig> - <ok to="or_or_0_1_6"/> - <error to="kill"/> - </action> - <action name="or_or_0_1_6"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <prepare> - <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_or_0_1_6"/> - </prepare> - <configuration> - <property> - <name>mapreduce.reduce.input.limit</name> - <value>-1</value> - </property> - <property> - <name>mapred.job.queue.name</name> - <value>${queueName}</value> - </property> - <property> - <name>mapreduce.job.acl-view-job</name> - <value>${SM_H20S_VIEWJOB}</value> - </property> - <property> - <name>oozie.launcher.mapreduce.job.acl-view-job</name> - <value>${SM_H20S_VIEWJOB}</value> - </property> - <property> - <name>mapred.map.tasks.speculative.execution</name> - <value>false</value> - </property> - <property> - <name>mapred.reduce.tasks.speculative.execution</name> - <value>false</value> - </property> - <property> - <name>oozie.launcher.mapred.child.java.opts</name> - <value>${OOZIE_LAUNCHER_MAPRED_CHILD_JAVA_OPTS}</value> - </property> - <property> - <name>SM3.DUMMYSID</name> - <value>FALSE</value> - </property> - </configuration> - <script>script/pig/sm3-segment-3908-251483-or_or_0_1_6.pig</script> - <param>REDUCERS=15</param> - <param>OUTPUT=/projects/sm3/root/request/251483/output/pig/or_or_0_1_6</param> - <param>INPUT1=/projects/sm3/root/request/251483/output/pig/or_or_0_1_5</param> - <param>USERTYPE1=yuid</param> - <param>INPUT2=/projects/sm3/root/segment/241/2/20120308_20120308</param> - <param>USERTYPE2=yuid</param> - </pig> - <ok to="or_or_0_1_7"/> - <error to="kill"/> - </action> - <action name="or_or_0_1_7"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <prepare> - <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_or_0_1_7"/> - </prepare> - <configuration> - <property> - <name>mapreduce.reduce.input.limit</name> - <value>-1</value> - </property> - <property> - <name>mapred.job.queue.name</name> - <value>${queueName}</value> - </property> - <property> - <name>mapreduce.job.acl-view-job</name> - <value>${SM_H20S_VIEWJOB}</value> - </property> - <property> - <name>oozie.launcher.mapreduce.job.acl-view-job</name> - <value>${SM_H20S_VIEWJOB}</value> - </property> - <property> - <name>mapred.map.tasks.speculative.execution</name> - <value>false</value> - </property> - <property> - <name>mapred.reduce.tasks.speculative.execution</name> - <value>false</value> - </property> - <property> - <name>oozie.launcher.mapred.child.java.opts</name> - <value>${OOZIE_LAUNCHER_MAPRED_CHILD_JAVA_OPTS}</value> - </property> - <property> - <name>SM3.DUMMYSID</name> - <value>FALSE</value> - </property> - </configuration> - <script>script/pig/sm3-segment-3908-251483-or_or_0_1_7.pig</script> - <param>REDUCERS=15</param> - <param>OUTPUT=/projects/sm3/root/request/251483/output/pig/or_or_0_1_7</param> - <param>INPUT1=/projects/sm3/root/request/251483/output/pig/or_or_0_1_6</param> - <param>USERTYPE1=yuid</param> - <param>INPUT2=/projects/sm3/root/segment/242/2/20120308_20120308</param> - <param>USERTYPE2=yuid</param> - </pig> - <ok to="or_or_0_1_8"/> - <error to="kill"/> - </action> - <action name="or_or_0_1_8"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <prepare> - <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_or_0_1_8"/> - </prepare> - <configuration> - <property> - <name>mapreduce.reduce.input.limit</name> - <value>-1</value> - </property> - <property> - <name>mapred.job.queue.name</name> - <value>${queueName}</value> - </property> - <property> - <name>mapreduce.job.acl-view-job</name> - <value>${SM_H20S_VIEWJOB}</value> - </property> - <property> - <name>oozie.launcher.mapreduce.job.acl-view-job</name> - <value>${SM_H20S_VIEWJOB}</value> - </property> - <property> - <name>mapred.map.tasks.speculative.execution</name> - <value>false</value> - </property> - <property> - <name>mapred.reduce.tasks.speculative.execution</name> - <value>false</value> - </property> - <property> - <name>oozie.launcher.mapred.child.java.opts</name> - <value>${OOZIE_LAUNCHER_MAPRED_CHILD_JAVA_OPTS}</value> - </property> - <property> - <name>SM3.DUMMYSID</name> - <value>FALSE</value> - </property> - </configuration> - <script>script/pig/sm3-segment-3908-251483-or_or_0_1_8.pig</script> - <param>REDUCERS=15</param> - <param>OUTPUT=/projects/sm3/root/request/251483/output/pig/or_or_0_1_8</param> - <param>INPUT1=/projects/sm3/root/request/251483/output/pig/or_or_0_1_7</param> - <param>USERTYPE1=yuid</param> - <param>INPUT2=/projects/sm3/root/segment/243/2/20120308_20120308</param> - <param>USERTYPE2=yuid</param> - </pig> - <ok to="or_or_0_1_9"/> - <error to="kill"/> - </action> - <action name="or_or_0_1_9"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <prepare> - <delete path="${nameNode}/projects/sm3/root/segment/3908/8/20120308_20120308"/> - </prepare> - <configuration> - <property> - <name>mapreduce.reduce.input.limit</name> - <value>-1</value> - </property> - <property> - <name>mapred.job.queue.name</name> - <value>${queueName}</value> - </property> - <property> - <name>mapreduce.job.acl-view-job</name> - <value>${SM_H20S_VIEWJOB}</value> - </property> - <property> - <name>oozie.launcher.mapreduce.job.acl-view-job</name> - <value>${SM_H20S_VIEWJOB}</value> - </property> - <property> - <name>mapred.map.tasks.speculative.execution</name> - <value>false</value> - </property> - <property> - <name>mapred.reduce.tasks.speculative.execution</name> - <value>false</value> - </property> - <property> - <name>oozie.launcher.mapred.child.java.opts</name> - <value>${OOZIE_LAUNCHER_MAPRED_CHILD_JAVA_OPTS}</value> - </property> - <property> - <name>SM3.DUMMYSID</name> - <value>FALSE</value> - </property> - </configuration> - <script>script/pig/sm3-segment-3908-251483-or_or_0_1_9.pig</script> - <param>REDUCERS=15</param> - <param>OUTPUT=/projects/sm3/root/segment/3908/8/20120308_20120308</param> - <param>INPUT1=/projects/sm3/root/request/251483/output/pig/or_or_0_1_8</param> - <param>USERTYPE1=yuid</param> - <param>INPUT2=/projects/sm3/root/segment/244/2/20120308_20120308</param> - <param>USERTYPE2=yuid</param> - </pig> - <ok to="cleanup"/> - <error to="kill"/> - </action> - <action name="cleanup"> - <fs> - <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_0_1"/> - <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_or_0_1_2"/> - <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_or_0_1_3"/> - <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_or_0_1_4"/> - <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_or_0_1_5"/> - <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_or_0_1_6"/> - <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_or_0_1_7"/> - <delete path="${nameNode}/projects/sm3/root/request/251483/output/pig/or_or_0_1_8"/> - </fs> - <ok to="end"/> - <error to="kill"/> - </action> - <end name="end"/> -</workflow-app> http://git-wip-us.apache.org/repos/asf/oozie/blob/883c7556/core/src/test/resources/graphWF_26_actions.xml ---------------------------------------------------------------------- diff --git a/core/src/test/resources/graphWF_26_actions.xml b/core/src/test/resources/graphWF_26_actions.xml deleted file mode 100644 index a091be0..0000000 --- a/core/src/test/resources/graphWF_26_actions.xml +++ /dev/null @@ -1,264 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor - license agreements. See the NOTICE file distributed with this work for additional - information regarding copyright ownership. The ASF licenses this file to - you under the Apache License, Version 2.0 (the "License"); you may not use - this file except in compliance with the License. You may obtain a copy of - the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required - by applicable law or agreed to in writing, software distributed under the - License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS - OF ANY KIND, either express or implied. See the License for the specific - language governing permissions and limitations under the License. --> -<workflow-app xmlns="uri:oozie:workflow:0.2" name="sm3-segment-3908-251483"> - <start to="or_0_1" /> - <kill name="kill"> - <message>killed message</message> - </kill> - <action name="or_0_1"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <script>echo.pig</script> - </pig> - <ok to="or_or_0_1_2" /> - <error to="kill" /> - </action> - - <action name="or_or_0_1_2"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <script>echo.pig</script> - </pig> - <ok to="or_or_0_1_3" /> - <error to="kill" /> - </action> - - <action name="or_or_0_1_3"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <script>echo.pig</script> - </pig> - <ok to="or_or_0_1_4" /> - <error to="kill" /> - </action> - - <action name="or_or_0_1_4"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <script>echo.pig</script> - </pig> - <ok to="or_or_0_1_5" /> - <error to="kill" /> - </action> - - <action name="or_or_0_1_5"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <script>echo.pig</script> - </pig> - <ok to="or_or_0_1_6" /> - <error to="kill" /> - </action> - - <action name="or_or_0_1_6"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <script>echo.pig</script> - </pig> - <ok to="or_or_0_1_7" /> - <error to="kill" /> - </action> - - <action name="or_or_0_1_7"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <script>echo.pig</script> - </pig> - <ok to="or_or_0_1_8" /> - <error to="kill" /> - </action> - - <action name="or_or_0_1_8"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <script>echo.pig</script> - </pig> - <ok to="or_or_0_1_9" /> - <error to="kill" /> - </action> - - <action name="or_or_0_1_9"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <script>echo.pig</script> - </pig> - <ok to="or_or_0_2_0" /> - <error to="kill" /> - </action> - - <action name="or_or_0_2_0"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <script>echo.pig</script> - </pig> - <ok to="or_or_0_2_1" /> - <error to="kill" /> - </action> - - <action name="or_or_0_2_1"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <script>echo.pig</script> - </pig> - <ok to="or_or_0_2_2" /> - <error to="kill" /> - </action> - - <action name="or_or_0_2_2"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <script>echo.pig</script> - </pig> - <ok to="or_or_0_2_3" /> - <error to="kill" /> - </action> - - <action name="or_or_0_2_3"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <script>echo.pig</script> - </pig> - <ok to="or_or_0_2_4" /> - <error to="kill" /> - </action> - - <action name="or_or_0_2_4"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <script>echo.pig</script> - </pig> - <ok to="or_or_0_2_5" /> - <error to="kill" /> - </action> - - <action name="or_or_0_2_5"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <script>echo.pig</script> - </pig> - <ok to="or_or_0_2_6" /> - <error to="kill" /> - </action> - - <action name="or_or_0_2_6"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <script>echo.pig</script> - </pig> - <ok to="or_or_0_2_7" /> - <error to="kill" /> - </action> - - <action name="or_or_0_2_7"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <script>echo.pig</script> - </pig> - <ok to="or_or_0_2_8" /> - <error to="kill" /> - </action> - - <action name="or_or_0_2_8"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <script>echo.pig</script> - </pig> - <ok to="or_or_0_2_9" /> - <error to="kill" /> - </action> - - <action name="or_or_0_2_9"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <script>echo.pig</script> - </pig> - <ok to="or_or_0_3_0" /> - <error to="kill" /> - </action> - - <action name="or_or_0_3_0"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <script>echo.pig</script> - </pig> - <ok to="or_or_0_3_1" /> - <error to="kill" /> - </action> - - <action name="or_or_0_3_1"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <script>echo.pig</script> - </pig> - <ok to="or_or_0_3_2" /> - <error to="kill" /> - </action> - - <action name="or_or_0_3_2"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <script>echo.pig</script> - </pig> - <ok to="or_or_0_3_3" /> - <error to="kill" /> - </action> - - <action name="or_or_0_3_3"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <script>echo.pig</script> - </pig> - <ok to="or_or_0_3_4" /> - <error to="kill" /> - </action> - - <action name="or_or_0_3_4"> - <pig> - <job-tracker>${jobTracker}</job-tracker> - <name-node>${nameNode}</name-node> - <script>echo.pig</script> - </pig> - <ok to="cleanup" /> - <error to="kill" /> - </action> - - <action name="cleanup"> - <fs> - </fs> - <ok to="end" /> - <error to="kill" /> - </action> - <end name="end" /> -</workflow-app>