You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@oozie.apache.org by András Piros via Review Board <no...@reviews.apache.org> on 2018/05/06 12:57:31 UTC

Re: Review Request 64029: OOZIE-2339 Provide an API for writing jobs based on the XSD schemas


> On March 27, 2018, 1:02 a.m., Robert Kanter wrote:
> > client/src/main/java/org/apache/oozie/cli/ApiJarFactory.java
> > Lines 41 (patched)
> > <https://reviews.apache.org/r/64029/diff/5/?file=1983722#file1983722line41>
> >
> >     Looks like this is used only by unit tests.  If so, then perhaps this should be moved to a test package and made package private?  I just want to make sure users won't start trying to use this class when they shouldn't be.

Moved to the same package, and set class and constructor package-private.


> On March 27, 2018, 1:02 a.m., Robert Kanter wrote:
> > client/src/main/java/org/apache/oozie/cli/WorkflowFactoryCompiler.java
> > Lines 36 (patched)
> > <https://reviews.apache.org/r/64029/diff/5/?file=1983725#file1983725line36>
> >
> >     Again, if this is for unit tests, we should move it to a different test and limit its scope if possible.

Moved to the same package, and set class and constructor package-private.


> On March 27, 2018, 1:02 a.m., Robert Kanter wrote:
> > client/src/main/java/org/apache/oozie/cli/WorkflowFactoryCompiler.java
> > Lines 65 (patched)
> > <https://reviews.apache.org/r/64029/diff/5/?file=1983725#file1983725line65>
> >
> >     Let's not turn this into Hadoop :)
> >     
> >     If this isn't working, it looks like the fileManager can be used to do something equivalent and you can throw away the ````options````.  Take a look at the second answer on the StackOverflow.

Refactored / rewritten `TestOozieCLI#createWorkflowApiJar()` to use `Class#getProtectionDomain().getCodeSource().getLocation()` instead for both JAR based (Maven) and class file based (IDE) executions.

WorkflowFactoryCompiler has been deleted.


> On March 27, 2018, 1:02 a.m., Robert Kanter wrote:
> > core/src/main/java/org/apache/oozie/BaseLocalOozieClient.java
> > Lines 558-559 (original), 559-568 (patched)
> > <https://reviews.apache.org/r/64029/diff/5/?file=1983727#file1983727line559>
> >
> >     Doesn't this change the V0 and V1 APIs?

No, it's only used from inside `OozieCLI#checkApiJar()`, `OozieCLI#validateCommand()`, and from one test case.


> On March 27, 2018, 1:02 a.m., Robert Kanter wrote:
> > docs/src/site/twiki/DG_CommandLineTool.twiki
> > Lines 1095 (patched)
> > <https://reviews.apache.org/r/64029/diff/5/?file=1983738#file1983738line1095>
> >
> >     ````queueName```` is a custom user-defined property, isn't it?  Just like ````nameNode```` and ````JobTracker````.  Does the Jobs API always require these three properties?  While commonly used (because users often copy the examples where these are used), they're not officially standard.

Being more clear on that subject. There can be `job.properties` when submitting / running an API JAR workflow, or that can be omitted - in that case, every parameter the user defined has to be supplied at the command line.


> On March 27, 2018, 1:02 a.m., Robert Kanter wrote:
> > docs/src/site/twiki/DG_JobsAPI.twiki
> > Lines 37 (patched)
> > <https://reviews.apache.org/r/64029/diff/5/?file=1983739#file1983739line37>
> >
> >     Does the Jobs API not enforce this?

Extended with more details on how Fluent Job API handles that case.


> On March 27, 2018, 1:02 a.m., Robert Kanter wrote:
> > docs/src/site/twiki/DG_JobsAPI.twiki
> > Lines 61 (patched)
> > <https://reviews.apache.org/r/64029/diff/5/?file=1983739#file1983739line61>
> >
> >     How does this work for backwards compatibility?  i.e. If I generate a jar using wf schema 1.0 and then upgrade Oozie which includes a 1.1 schema, is my jar no longer accepted by Oozie?  Do I need to recompile?  Is it possible that the API has changed and it won't compile anymore?
> >     
> >     We should make sure to have a good story around backwards compatibility.  I think it's reasonable to only _generate_ jars using the latest schema, but we should at least accept older jars, ideally without recompiling.

When new schemas are introduced to Oozie, old Fluent Job API JARs as well as old workflow.xml definitions keep of course working.

For the time being I would ship this feature without any more guarantees on backward compatibility - the patch is way too huge to deal with anyways. We can consider something like having guest-facing API packages versioned like `org.apache.oozie.fluentjob.api.v1.workflow` to maintain binary compatibility to older XSDs and be able to innovate effortless later.

What do you think?


> On March 27, 2018, 1:02 a.m., Robert Kanter wrote:
> > docs/src/site/twiki/DG_JobsAPI.twiki
> > Lines 162 (patched)
> > <https://reviews.apache.org/r/64029/diff/5/?file=1983739#file1983739line162>
> >
> >     I like these examples - I think they're good for showing the new API.
> >     
> >     It would be great if we could add some examples to the examples module so users could more easily play with it.  As you know, many users copy our example XML workflows as a starting place, so it would be good to provide some Java ones too.  This can be done as a followup JIRA: please file one.

Created three examples in `org.apache.oozie.example.fluentjob` package.


> On March 27, 2018, 1:02 a.m., Robert Kanter wrote:
> > jobs/jobs-api/pom.xml
> > Lines 111-120 (patched)
> > <https://reviews.apache.org/r/64029/diff/5/?file=1983740#file1983740line111>
> >
> >     It's unfortunate that we have to keep this manually :(
> >     
> >     I hope we don't forget to update this when adding new schema versions.  Perhaps there's some way to write a unit test that would fail if a developer added a newer schema version and didn't update this?  That would prevent this issue.

Yes, we have to maintain that stuff manually.

Writing a piece of documentation about how to extend new schema versions and maintain backwards compatibility. This is achieved by extending this `pom.xml` and `xjb/bindings.xml` for the new schema versions, and for the new Fluent API JAR generated packages.

I'm thinking of having `org.apache.oozie.fluentjob.api.v1.generated` as a root package for all 1.0 XSDs listed in `xjb/bindings.xml`, and used elsewhere.

What do you think?


> On March 27, 2018, 1:02 a.m., Robert Kanter wrote:
> > jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/ActionAttributes.java
> > Lines 29 (patched)
> > <https://reviews.apache.org/r/64029/diff/5/?file=1983744#file1983744line29>
> >
> >     Now that we're on Yarn, we should rename all ````jobTracker```` and similar to ````resourceManager```` and similar.  The earlier version of the schemas the Jobs API is supporting is 1.0 (and friends), which all allow for ````<resource-manager>```` so we should use that and just never even start with anything Job Tracker.  The generated XML should also use ````<resource-manager>```` only too.

There's both `<job-tracker>` and `<resource-manager>` within `oozie-workflow-1.0.xsd`, and therefore there's both `ActionAttributes#jobTracker` and `ActionAttributes#resourceManager`. I'd leave the API like it is, only removing `jobTracker` calls when they are already gone from XSDs.

Marking as `@Deprecated`, though, and substituting `Builder#withJobTracker()` calls w/ `Builder#withResourceManager()` ones both in code, examples, and documentation.


> On March 27, 2018, 1:02 a.m., Robert Kanter wrote:
> > jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/ErrorHandler.java
> > Lines 23-34 (patched)
> > <https://reviews.apache.org/r/64029/diff/5/?file=1983758#file1983758line23>
> >
> >     It would be good to add info about this to the twiki docs.  It's a common pattern to have an email action from an error transition before hitting a kill node.  Adding an example of that in the twiki docs would be great too :)

Added into all examples, and update docs with these details of having an `EmailAction` as `ErrorHandler`.


> On March 27, 2018, 1:02 a.m., Robert Kanter wrote:
> > jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/factory/SimpleWorkflowFactory.java
> > Lines 34 (patched)
> > <https://reviews.apache.org/r/64029/diff/5/?file=1983795#file1983795line34>
> >
> >     I think this should either be in the test archive/package and/or in the example artifact.

Moved `SimpleWorkflowFactory` and `MultipleShellNodesWorkflowFactory` to the `test-jar` artifact of `oozie-fluent-job-api`, and using that in `oozie-core`.

Also introduced `SimpleWorkflowFactory` as an example.


> On March 27, 2018, 1:02 a.m., Robert Kanter wrote:
> > jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/oozie/dag/Decision.java
> > Lines 32 (patched)
> > <https://reviews.apache.org/r/64029/diff/5/?file=1983835#file1983835line32>
> >
> >     Should we make this, and other nodes that the user shouldn't need to use, private (or at least package-private the constructor)?

Because the `? extends DozerConverter` classes are in other packages, we cannot. I think it's enough to have documented how to use the API, and that most of these value object classes are not easily modified apart from `Builder` instances.


> On March 27, 2018, 1:02 a.m., Robert Kanter wrote:
> > jobs/jobs-client/src/test/java/org/apache/oozie/jobs/client/examples/TestJavaMainExample.java
> > Lines 35 (patched)
> > <https://reviews.apache.org/r/64029/diff/5/?file=1983940#file1983940line35>
> >
> >     What are the "Test___Example" classes for?  They look like they're unit tests but don't actually assert anything.  While it's nice to have examples of all of the actions, I don't think anyone's going to look at these.  Users won't because they won't know to look here for examples, and Oozie devs won't because these won't be failing (unless something is really wrong).  
> >     
> >     Perhaps we should repurpose these for actual examples in the examples artifact instead?  I suggested in a different comment that it would be good to have these because users often start with our XML examples when writing workflows.  We can make this a followup JIRA if you want.
> >     
> >     In their current state, I'm not sure these are helping anyone.

Moved to `oozie-examples` artifact as actual examples into package `org.apache.oozie.example.fluentjob`.


- András


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/64029/#review200001
-----------------------------------------------------------


On March 20, 2018, 9:58 p.m., András Piros wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/64029/
> -----------------------------------------------------------
> 
> (Updated March 20, 2018, 9:58 p.m.)
> 
> 
> Review request for oozie, Attila Sasvari, Peter Cseh, and Robert Kanter.
> 
> 
> Repository: oozie-git
> 
> 
> Description
> -------
> 
> OOZIE-2339 Provide an API for writing jobs based on the XSD schemas
> 
> 
> Diffs
> -----
> 
>   .gitignore a4285a0d77ac2e4e8fc4afbfa21bf9fd287b3e4d 
>   client/pom.xml 31cd43fa5311484f92cc8d33b4fc7b4cf13d66c4 
>   client/src/main/java/org/apache/oozie/cli/ApiJarFactory.java PRE-CREATION 
>   client/src/main/java/org/apache/oozie/cli/ApiJarLoader.java PRE-CREATION 
>   client/src/main/java/org/apache/oozie/cli/OozieCLI.java 4abc7502c0c9d8b59ded2baaed30c407ad073008 
>   client/src/main/java/org/apache/oozie/cli/WorkflowFactoryCompiler.java PRE-CREATION 
>   client/src/main/java/org/apache/oozie/client/OozieClient.java 4c8175628ba5ee346d97ad984532662032b88acc 
>   core/src/main/java/org/apache/oozie/BaseLocalOozieClient.java 38fb006980c0acb582b4f91175be1ced8a1afa79 
>   core/src/main/java/org/apache/oozie/local/LocalOozie.java 9ab646cd53223d903e387eb92aa103a7b6577d0f 
>   core/src/main/java/org/apache/oozie/servlet/BaseJobServlet.java e1bd3cf61aabfa4311881b2944fc9f10ffe9145d 
>   core/src/main/java/org/apache/oozie/servlet/BaseJobsServlet.java d4b08711223356c8d4f58a3391b6b87efa0a2b73 
>   core/src/main/java/org/apache/oozie/servlet/ServletUtilities.java 9cdd915c02a3e34ad211cf6cced2e64f3a1196a0 
>   core/src/main/java/org/apache/oozie/servlet/V0JobsServlet.java ff50f3d121d8af7d607124424915e1bf30ffb109 
>   core/src/main/java/org/apache/oozie/servlet/V1JobsServlet.java c1ca65fd2f8bf0f3e5c618dddcba3bf52eaf5420 
>   core/src/main/java/org/apache/oozie/servlet/V2ValidateServlet.java b86fa6ace43aead115302aad3ae15368b15f1923 
>   core/src/main/resources/oozie-default.xml 966dd29b20ffb4a627418d62403c0cec166dd147 
>   core/src/test/java/org/apache/oozie/client/TestOozieCLI.java 3395cc25d27805444ba0b6463357c4ecff977ac1 
>   core/src/test/java/org/apache/oozie/test/MiniOozieTestCase.java 12ede028655f2a30613a9f802e48cd3a27af6ed9 
>   docs/src/site/twiki/DG_CommandLineTool.twiki a94201ded8451cc725b40e9f73182ecaa52be88a 
>   docs/src/site/twiki/DG_JobsAPI.twiki PRE-CREATION 
>   jobs/jobs-api/pom.xml PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/Condition.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/GraphVisualization.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/ModifyOnce.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/ActionAttributes.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/ActionAttributesBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/Builder.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/ChFSBase.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/ChFSBaseBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/Chgrp.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/ChgrpBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/Chmod.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/ChmodBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/Delete.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/DistcpAction.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/DistcpActionBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/EmailAction.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/EmailActionBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/ErrorHandler.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/FSAction.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/FSActionBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/HasAttributes.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/Hive2Action.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/Hive2ActionBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/HiveAction.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/HiveActionBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/JavaAction.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/JavaActionBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/Launcher.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/LauncherBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/MapReduceAction.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/MapReduceActionBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/Mkdir.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/Move.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/Node.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/NodeBuilderBaseImpl.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/PigAction.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/PigActionBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/Pipes.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/PipesBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/Prepare.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/PrepareBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/ShellAction.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/ShellActionBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/SparkAction.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/SparkActionBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/SqoopAction.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/SqoopActionBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/SshAction.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/SshActionBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/Streaming.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/StreamingBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/SubWorkflowAction.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/SubWorkflowActionBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/action/Touchz.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/factory/SimpleWorkflowFactory.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/factory/WorkflowFactory.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/BooleanToFLAGConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/BooleanToShellFLAGConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/BooleanToSshFLAGConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/CredentialsConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/DecisionConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/DistcpConfigurationConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/DistcpPrepareConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/DozerBeanMapperSingleton.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/ExplicitNodeConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/ForkConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/GlobalConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/GraphNodes.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/GraphNodesToWORKFLOWAPPConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/GraphToWORKFLOWAPPConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/Hive2ConfigurationConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/Hive2LauncherConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/Hive2PrepareConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/HiveConfigurationConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/HiveLauncherConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/HivePrepareConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/InlineWorkflowConfigurationConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/InlineWorkflowLauncherConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/InlineWorkflowPrepareConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/JoinConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/MapToConfigurationPropertyConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/ParametersConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/RealChildLocator.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/ShellConfigurationConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/ShellLauncherConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/ShellPrepareConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/SparkConfigurationConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/SparkLauncherConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/SparkPrepareConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/SqoopConfigurationConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/SqoopLauncherConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/SqoopPrepareConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/mapping/StartConverter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/oozie/dag/DagNodeWithCondition.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/oozie/dag/Decision.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/oozie/dag/DecisionJoin.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/oozie/dag/End.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/oozie/dag/ExplicitNode.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/oozie/dag/Fork.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/oozie/dag/Graph.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/oozie/dag/Join.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/oozie/dag/JoiningNodeBase.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/oozie/dag/NodeBase.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/oozie/dag/Start.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/serialization/WorkflowMarshaller.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/workflow/ConfigurationEntry.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/workflow/Credential.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/workflow/Credentials.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/workflow/CredentialsBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/workflow/Global.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/workflow/GlobalBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/workflow/Parameter.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/workflow/Parameters.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/workflow/ParametersBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/workflow/Workflow.java PRE-CREATION 
>   jobs/jobs-api/src/main/java/org/apache/oozie/jobs/api/workflow/WorkflowBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/main/resources/action_mappings.xml PRE-CREATION 
>   jobs/jobs-api/src/main/resources/checkstyle-header.txt PRE-CREATION 
>   jobs/jobs-api/src/main/resources/checkstyle.xml PRE-CREATION 
>   jobs/jobs-api/src/main/resources/dozer_config.xml PRE-CREATION 
>   jobs/jobs-api/src/main/resources/mappingGraphToWORKFLOWAPP.xml PRE-CREATION 
>   jobs/jobs-api/src/main/xjb/bindings.xml PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/NodesToPng.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/TestCondition.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/TestModifyOnce.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/action/TestActionAttributesBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/action/TestChBaseBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/action/TestChgrpBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/action/TestChmodBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/action/TestDelete.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/action/TestDistcpActionBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/action/TestEmailActionBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/action/TestErrorHandler.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/action/TestFSActionBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/action/TestHive2ActionBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/action/TestHiveActionBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/action/TestJavaActionBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/action/TestLauncherBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/action/TestMapReduceActionBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/action/TestMove.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/action/TestNodeBuilderBaseImpl.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/action/TestPigActionBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/action/TestPipesBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/action/TestPrepareBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/action/TestShellActionBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/action/TestSparkActionBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/action/TestSqoopActionBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/action/TestSshActionBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/action/TestStreamingBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/action/TestSubWorkflowBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/action/TestTouchz.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestConfigurationMapping.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestControlNodeMappingBase.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestCredentialsMapping.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestDecisionMapping.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestDeleteMapping.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestDistcpActionMapping.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestEmailActionMapping.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestEndMapping.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestExplicitNodeMapping.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestFSActionMapping.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestForkMapping.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestGlobalMapping.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestGraphMapping.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestHive2ActionMapping.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestHiveActionMapping.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestJavaActionMapping.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestJoinMapping.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestMapReduceActionMapping.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestMappings.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestMkdirMapping.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestParametersMapping.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestPigActionMapping.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestPipesMapping.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestPrepareMapping.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestShellActionMapping.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestSparkActionMapping.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestSqoopActionMapping.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestSshActionMapping.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestStartMapping.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestStreamingMapping.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/mapping/TestSubWorkflowActionMapping.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/oozie/dag/TestDecision.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/oozie/dag/TestDecisionJoin.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/oozie/dag/TestEnd.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/oozie/dag/TestExplicitNode.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/oozie/dag/TestFork.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/oozie/dag/TestGraph.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/oozie/dag/TestJoin.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/oozie/dag/TestJoiningNodeBase.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/oozie/dag/TestNodeBase.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/oozie/dag/TestStart.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/workflow/TestCredentialsBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/workflow/TestGlobalBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/workflow/TestParametersBuilder.java PRE-CREATION 
>   jobs/jobs-api/src/test/java/org/apache/oozie/jobs/api/workflow/TestWorkflowBuilder.java PRE-CREATION 
>   jobs/jobs-client/pom.xml PRE-CREATION 
>   jobs/jobs-client/src/test/java/org/apache/oozie/jobs/client/examples/TestCredentialsExample.java PRE-CREATION 
>   jobs/jobs-client/src/test/java/org/apache/oozie/jobs/client/examples/TestGlobalExample.java PRE-CREATION 
>   jobs/jobs-client/src/test/java/org/apache/oozie/jobs/client/examples/TestJavaMainExample.java PRE-CREATION 
>   jobs/jobs-client/src/test/java/org/apache/oozie/jobs/client/examples/TestParametersExample.java PRE-CREATION 
>   jobs/jobs-client/src/test/java/org/apache/oozie/jobs/client/examples/TestShellExample.java PRE-CREATION 
>   jobs/jobs-client/src/test/java/org/apache/oozie/jobs/client/examples/TestSparkExample.java PRE-CREATION 
>   jobs/jobs-client/src/test/java/org/apache/oozie/jobs/client/jaxb/TestJAXBWorkflow.java PRE-CREATION 
>   jobs/jobs-client/src/test/java/org/apache/oozie/jobs/client/minitest/TestDistcpAction.java PRE-CREATION 
>   jobs/jobs-client/src/test/java/org/apache/oozie/jobs/client/minitest/TestEmailAction.java PRE-CREATION 
>   jobs/jobs-client/src/test/java/org/apache/oozie/jobs/client/minitest/TestFSAction.java PRE-CREATION 
>   jobs/jobs-client/src/test/java/org/apache/oozie/jobs/client/minitest/TestHive2Action.java PRE-CREATION 
>   jobs/jobs-client/src/test/java/org/apache/oozie/jobs/client/minitest/TestHiveAction.java PRE-CREATION 
>   jobs/jobs-client/src/test/java/org/apache/oozie/jobs/client/minitest/TestJavaAction.java PRE-CREATION 
>   jobs/jobs-client/src/test/java/org/apache/oozie/jobs/client/minitest/TestMapReduceAction.java PRE-CREATION 
>   jobs/jobs-client/src/test/java/org/apache/oozie/jobs/client/minitest/TestPigAction.java PRE-CREATION 
>   jobs/jobs-client/src/test/java/org/apache/oozie/jobs/client/minitest/TestShellAction.java PRE-CREATION 
>   jobs/jobs-client/src/test/java/org/apache/oozie/jobs/client/minitest/TestSparkAction.java PRE-CREATION 
>   jobs/jobs-client/src/test/java/org/apache/oozie/jobs/client/minitest/TestSqoopAction.java PRE-CREATION 
>   jobs/jobs-client/src/test/java/org/apache/oozie/jobs/client/minitest/TestSshAction.java PRE-CREATION 
>   jobs/jobs-client/src/test/resources/workflow-all-actions.xml PRE-CREATION 
>   jobs/jobs-client/src/test/resources/workflow-mapreduce-action.xml PRE-CREATION 
>   jobs/pom.xml PRE-CREATION 
>   minitest/pom.xml 220cdfd3ef4ecfd2038485d3da6330c58c3435e8 
>   minitest/src/test/java/org/apache/oozie/test/TestWorkflow.java 4257b60b132d40a9bbaf24ec75ae1a125ecb6855 
>   minitest/src/test/java/org/apache/oozie/test/WorkflowTestCase.java PRE-CREATION 
>   pom.xml 274a04715935437f74601e44a8522649dcd1c433 
> 
> 
> Diff: https://reviews.apache.org/r/64029/diff/5/
> 
> 
> Testing
> -------
> 
> More hundred JUnit test cases under `jobs-api` module. Some of these leverage `TestWorkflow` from `minitest` that uses `OozieClient`, `MiniDFSCluster`, `MiniMRCluster` for integration testing.
> 
> 
> Thanks,
> 
> András Piros
> 
>