> On Aug. 16, 2017, 8:33 p.m., Robert Kanter wrote:
> > client/src/main/resources/hive-action-0.7.xsd
> > Lines 49 (patched)
> > <https://reviews.apache.org/r/61529/diff/2/?file=1796924#file1796924line49>
> >
> >     Can we put CONFIGURATION into oozie-common?
> >     
> >     Same with PREPARE, DELETE, and MKDIR?
> 
> Attila Sasvari wrote:
>     Right now I changed oozie-common so that its targetNamespace is 
> targetNamespace="uri:oozie:workflow:1.0"
>     This way common prefix is not needed if ``<launcher>`` is present in the 
> global config (include statement can be used).
>     
>     ```
>     <global>
>              <launcher>
>                     <workflow:memory>1024</workflow:memory>
>                     <workflow:vcores>2</workflow:vcores>
>                     <workflow:java-opts>-verbose:class</workflow:java-opts>
>                     <workflow:env>dummyEnv=42</workflow:env>
>                     <workflow:queue>dummyQueue</workflow:queue>
>                 </launcher>
>     </global>
>     ```
>     
>     Other actions use the import statement and still need the ``workflow`` 
> prefix for the vcore,memory, etc. if they include the ``<launcher>`` element. 
> They also need to define workflow namespace with ``xmlns:workflow``.
>     
>     ```
>     <workflow-app xmlns="uri:oozie:workflow:1.0" 
> xmlns:workflow="uri:oozie:workflow:1.0" name="shell-wf">
>         <start to="shell-node"/>
>         <action name="shell-node">
>             <shell xmlns="uri:oozie:shell-action:1.0">
>                 <job-tracker>${jobTracker}</job-tracker>
>                 <name-node>${nameNode}</name-node>
>                 <launcher>
>                     <workflow:memory>1024</workflow:memory>
>                     <workflow:vcores>2</workflow:vcores>
>                     <workflow:java-opts>-verbose:class</workflow:java-opts>
>                     <workflow:env>dummyEnv=42</workflow:env>
>                     <workflow:queue>dummyQueue</workflow:queue>
>                     <workflow:sharelib>a,b,c</workflow:sharelib>
>                 </launcher>
>     ```
>     
>     ``xs:any`` would require the prefix (like the sla complex type). Using 
> ``<xs:any namespace="##other" minOccurs="1" maxOccurs="1"/>`` could work, but 
> is too permissive - for example you could add any element (e.g. a hive 
> action) instead of a ``launcher``.
>     
>     I am trying to find a better way, but please share if you have some ideas.
> 
> Attila Sasvari wrote:
>     If I use ``ref`` like ``<xs:element ref="workflow:launcher" minOccurs="0" 
> maxOccurs="1"/>`` for example in the hive action, it becomes a bit more clean 
> to define a ``launcher`` element:
>     
>     ```
>     <workflow-app xmlns="uri:oozie:workflow:1.0" name="hive-wf">
>     ...
>       <hive xmlns="uri:oozie:workflow:hive-action:1.0">
>     ...
>         <launcher xmlns="uri:oozie:workflow:1.0">
>           <memory>1024</memory>
>         </launcher>" 
>     ```
>     
>     This way it is not needed to define the workflow namespace in the 
> workflow element and use it as prefix.
>     
>     I was also considering to add other elements to the common workflow 
> namespace. Because of the namespace differences of actions, it would not be 
> easy to include say ``configuration`` - we would need to define workflow 
> namespace and prefix.
> 
> Peter Cseh wrote:
>     I like the idea of setting xmlns for launcher inside the launcher tag if 
> we don't have to use prefixes after that.
> 
> Robert Kanter wrote:
>     Have you tried using include instead of import?  From some googling, it 
> sounds like if you (a) use include, (b) don't set a target namespace, and (c) 
> don't have a namespace in the included xsd, then it will work the way we 
> want.  
>     
>     
> https://stackoverflow.com/questions/2357943/whats-the-difference-between-xsdinclude-and-xsdimport
>     https://stackoverflow.com/questions/914020/xsd-with-imports-and-namespaces
>     
> https://stackoverflow.com/questions/9805359/how-to-handle-multiple-namespaces-with-different-uri-in-xsd
>     
>     This link talks about this case from an XSD spec point of view, but it's 
> hard to understand:
>     https://www.w3.org/TR/xmlschema-1/#compound-schema
>     
>     
>     If that works, then I'd vote we go for that.  Otherwise, I'd vote for 
> whatever is easiest for the user.  If that means we have to duplicate XSD 
> code like we do today, that's ok.
> 
> Attila Sasvari wrote:
>     Thanks for the ideas. I have already read some of those entries. Anyway, 
> I tried again the suggestion: I had to use ``import`` otherwise referencing 
> did not work: 
>     - Using ``<xs:include schemaLocation="oozie-common-1.0.xsd"/>`` and 
> ``<xs:element ref="launcher" minOccurs="0" maxOccurs="1"/>`` :
>     ```
>     Caused by: org.xml.sax.SAXParseException; systemId: 
> file:///Users/asasvari/workspace/apache/oozie_dup/core/oozie-workflow-1.0.xsd;
>  lineNumber: 71; columnNumber: 69; src-resolve.4.1: Error resolving component 
> 'launcher'. It was detected that 'launcher' has no namespace, but components 
> with no target namespace are not referenceable from schema document 
> 'file:///Users/asasvari/workspace/apache/oozie_dup/core/oozie-workflow-1.0.xsd'.
>  If 'launcher' is intended to have a namespace, perhaps a prefix needs to be 
> provided. If it is intended that 'launcher' has no namespace, then an 
> 'import' without a "namespace" attribute should be added to 
> 'file:///Users/asasvari/workspace/apache/oozie_dup/core/oozie-workflow-1.0.xsd'.
>     
>     ```
>     - Using ``<xs:element name="launcher" type="LAUNCHER" minOccurs="0" 
> maxOccurs="1"/>`` also resulted in:
>     ```
>     Caused by: org.xml.sax.SAXParseException; systemId: 
> file:///Users/asasvari/workspace/apache/oozie_dup/core/oozie-workflow-1.0.xsd;
>  lineNumber: 71; columnNumber: 86; src-resolve.4.1: Error resolving component 
> 'LAUNCHER'. It was detected that 'LAUNCHER' has no namespace, but components 
> with no target namespace are not referenceable from schema document 
> 'file:///Users/asasvari/workspace/apache/oozie_dup/core/oozie-workflow-1.0.xsd'.
>  If 'LAUNCHER' is intended to have a namespace, perhaps a prefix needs to be 
> provided. If it is intended that 'LAUNCHER' has no namespace, then an 
> 'import' without a "namespace" attribute should be added to 
> 'file:///Users/asasvari/workspace/apache/oozie_dup/core/oozie-workflow-1.0.xsd'.
>     
>     ```
>     
>     When I switched to ``<xs:import schemaLocation="oozie-common-1.0.xsd"/>`` 
> and ``<xs:element ref="launcher" minOccurs="0" maxOccurs="1"/>``, the 
> following exception was thrown by Xerces: 
>     ```
>     org.xml.sax.SAXParseException; lineNumber: 4; columnNumber: 24; 
> cvc-complex-type.2.4.a: Invalid content was found starting with element 
> 'memory.mb'. One of '{memory.mb, vcores, java-opts, env, queue, sharelib}' is 
> expected.
>     ```
>     
>     Running the sqoop action validation test was also strange:
>     ```
>     org.xml.sax.SAXParseException; lineNumber: 3; columnNumber: 19; 
> cvc-complex-type.2.4.a: Invalid content was found starting with element 
> 'launcher'. One of '{"uri:oozie:workflow:1.0":job-tracker, 
> "uri:oozie:workflow:1.0":resource-manager, 
> "uri:oozie:workflow:1.0":name-node, "uri:oozie:workflow:1.0":job-xml, 
> launcher, "uri:oozie:workflow:1.0":configuration}' is expected.
>     ```
>     
>     It is strange that referencing an element with a complex type from a 
> default namespace fails to validate.

I tried playing around with this, and looked especially at the third 
stackoverflow link, and I think I got it working.  Here's a proof of concept 
patch that goes on top of your patch.  It changes the oozie-common xsd to not 
have a namespace, and the hive xsd to use the LAUNCHER type from there without 
a prefix.  I ran TestSchemaService#testHiveActionLauncherConfig to verify.  
Assuming this isn't a fluke, we'd just need to extend this to the other schemas 
and move other common things to oozie-common like \<configuration>.  Please 
take a look and let me know what you think.

````
diff --git a/client/src/main/resources/hive-action-1.0.xsd 
b/client/src/main/resources/hive-action-1.0.xsd
index 6fc921ae51..de6e7c1529 100644
--- a/client/src/main/resources/hive-action-1.0.xsd
+++ b/client/src/main/resources/hive-action-1.0.xsd
@@ -18,11 +18,10 @@
 -->
 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema";
            xmlns:hive="uri:oozie:hive-action:1.0"
-           xmlns:workflow="uri:oozie:workflow:1.0"
            elementFormDefault="qualified"
            targetNamespace="uri:oozie:hive-action:1.0">
 
-    <xs:import namespace="uri:oozie:workflow:1.0"/>
+    <xs:include schemaLocation="oozie-common-1.0.xsd"/>
 
     <xs:element name="hive" type="hive:ACTION"/>
 
@@ -35,7 +34,7 @@
             <xs:element name="name-node" type="xs:string" minOccurs="0" 
maxOccurs="1"/>
             <xs:element name="prepare" type="hive:PREPARE" minOccurs="0" 
maxOccurs="1"/>
             <xs:element name="job-xml" type="xs:string" minOccurs="0" 
maxOccurs="unbounded"/>
-            <xs:element ref="workflow:launcher" minOccurs="0" maxOccurs="1"/>
+            <xs:element name="launcher" type="hive:LAUNCHER" minOccurs="0" 
maxOccurs="1"/>
             <xs:element name="configuration" type="hive:CONFIGURATION" 
minOccurs="0" maxOccurs="1"/>
             <xs:choice minOccurs="1" maxOccurs="1">
                 <xs:element name="script" type="xs:string" minOccurs="1" 
maxOccurs="1"/>
diff --git a/client/src/main/resources/oozie-common-1.0.xsd 
b/client/src/main/resources/oozie-common-1.0.xsd
index e149f6d4b6..beb9d4d0ca 100644
--- a/client/src/main/resources/oozie-common-1.0.xsd
+++ b/client/src/main/resources/oozie-common-1.0.xsd
@@ -17,8 +17,8 @@
   limitations under the License.
 -->
 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema";  
xmlns:workflow="uri:oozie:workflow:1.0"
-           elementFormDefault="qualified" 
targetNamespace="uri:oozie:workflow:1.0">
-    <xs:element name="launcher" type="workflow:LAUNCHER"/>
+           elementFormDefault="qualified">
+    <xs:element name="launcher" type="LAUNCHER"/>
 
     <xs:complexType name="LAUNCHER">
         <xs:choice maxOccurs="unbounded">
diff --git a/core/src/test/java/org/apache/oozie/service/TestSchemaService.java 
b/core/src/test/java/org/apache/oozie/service/TestSchemaService.java
index 79c688e331..d7465cade4 100644
--- a/core/src/test/java/org/apache/oozie/service/TestSchemaService.java
+++ b/core/src/test/java/org/apache/oozie/service/TestSchemaService.java
@@ -128,7 +128,7 @@ public class TestSchemaService extends XTestCase {
             "</workflow-app>\n";
 
     private static final String HIVE_ACTION_LAUNCHER_CONF =
-            "<workflow-app xmlns:workflow=\"uri:oozie:workflow:1.0\" 
xmlns=\"uri:oozie:workflow:1.0\" name=\"hive-wf\">\n" +
+            "<workflow-app xmlns=\"uri:oozie:workflow:1.0\" 
name=\"hive-wf\">\n" +
                     "    <start to=\"hive-node\"/>\n" +
                     "\n" +
                     "    <action name=\"hive-node\">\n" +
@@ -139,7 +139,7 @@ public class TestSchemaService extends XTestCase {
                     "                <delete 
path=\"${nameNode}/user/${wf:user()}/${examplesRoot}/output-data/hive\"/>\n" +
                     "                <mkdir 
path=\"${nameNode}/user/${wf:user()}/${examplesRoot}/output-data\"/>\n" +
                     "            </prepare>\n" +
-                    "            <launcher 
xmlns=\"uri:oozie:workflow:1.0\">\n" +
+                    "            <launcher>\n" +
                     "                <memory.mb>1024</memory.mb>\n" +
                     "                <vcores>2</vcores>\n" +
                     "                <java-opts>dummyJavaOpts</java-opts>\n" +
````


- Robert


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


On Sept. 8, 2017, 10:04 a.m., Attila Sasvari wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/61529/
> -----------------------------------------------------------
> 
> (Updated Sept. 8, 2017, 10:04 a.m.)
> 
> 
> Review request for oozie and Peter Cseh.
> 
> 
> Repository: oozie-git
> 
> 
> Description
> -------
> 
> New workflow xsd to allow changing launcher configuration (e.g. setting java 
> system properties)
> 
> 
> Diffs
> -----
> 
>   client/src/main/resources/hive-action-1.0.xsd PRE-CREATION 
>   client/src/main/resources/hive2-action-1.0.xsd PRE-CREATION 
>   client/src/main/resources/oozie-common-1.0.xsd PRE-CREATION 
>   client/src/main/resources/oozie-workflow-1.0.xsd PRE-CREATION 
>   client/src/main/resources/shell-action-1.0.xsd PRE-CREATION 
>   client/src/main/resources/spark-action-1.0.xsd PRE-CREATION 
>   client/src/main/resources/sqoop-action-1.0.xsd PRE-CREATION 
>   core/src/main/java/org/apache/oozie/action/hadoop/JavaActionExecutor.java 
> bca79aa052521ea4f6f16e76bd69f84fb16be790 
>   core/src/main/java/org/apache/oozie/action/hadoop/SqoopActionExecutor.java 
> 8fdc50cce15271c13b20d1aaab2ffb95cb8fa711 
>   core/src/main/java/org/apache/oozie/action/ssh/SshActionExecutor.java 
> 7e3348550e2ef44ae4bd6c5a7a417052bf9c108a 
>   core/src/main/java/org/apache/oozie/jms/MessageReceiver.java 
> 47bfd2bcf9b53eed0882c51cdb5c530e0f6ccfe7 
>   core/src/main/java/org/apache/oozie/service/LiteWorkflowStoreService.java 
> ffc29af2f834da6d0890ea7215c5a62fd7cd693e 
>   core/src/main/java/org/apache/oozie/service/SchemaService.java 
> 137e2c0b4840c6d3858683db1aa38f54bd55be92 
>   core/src/main/java/org/apache/oozie/util/WritableUtils.java 
> aa027e37ba23d4f481698e0bcd93c26c763a0b1f 
>   core/src/main/java/org/apache/oozie/util/schema/Input.java PRE-CREATION 
>   core/src/main/java/org/apache/oozie/util/schema/ResourceResolver.java 
> PRE-CREATION 
>   
> core/src/main/java/org/apache/oozie/workflow/lite/LauncherConfigHandler.java 
> PRE-CREATION 
>   
> core/src/main/java/org/apache/oozie/workflow/lite/LiteWorkflowAppParser.java 
> a74e5c759fe3e336e7e98c61b8f5ac52efa4100c 
>   core/src/main/java/org/apache/oozie/workflow/lite/LiteWorkflowLib.java 
> 23df0867e5984c518e8424d79365997bec28f619 
>   core/src/main/resources/oozie-default.xml 
> 0d174b5069aff36ca3a9d48722c5bba69623a046 
>   
> core/src/test/java/org/apache/oozie/action/hadoop/ActionExecutorTestCase.java 
> d74160a09ee237f4067e00ded526e7ec94528a6b 
>   core/src/test/java/org/apache/oozie/action/hadoop/LauncherMainTester.java 
> 6cee7a8948ca7f2c7aaf44d4f172d18a1308a482 
>   
> core/src/test/java/org/apache/oozie/action/hadoop/TestJavaActionExecutor.java 
> ce674adf9cffa20690083e6298875a6f9047a109 
>   core/src/test/java/org/apache/oozie/service/TestSchemaService.java 
> 88a10dbead32879334c3953a90a411a3a18fc0b3 
>   core/src/test/java/org/apache/oozie/util/TestMetricsInstrumentation.java 
> a882c82b25154338f89e8a90f831b6f0300fbfe7 
>   
> core/src/test/java/org/apache/oozie/workflow/lite/TestLiteWorkflowAppParser.java
>  21332404bea79fe0a3cea045d57b3e52a1f15cae 
>   core/src/test/resources/wf-schema-global-launcherconf-override.xml 
> PRE-CREATION 
>   core/src/test/resources/wf-schema-global-launcherconf.xml PRE-CREATION 
>   sharelib/oozie/src/main/java/org/apache/oozie/action/hadoop/LauncherAM.java 
> 6a98d6ef3a09a7a75272f3f0f9a9c2fc5472e76d 
>   sharelib/pig/src/test/java/org/apache/oozie/action/hadoop/UDFTester.java 
> ff999ff2cd4875fbf3ad5e1a7eacf9972e848630 
> 
> 
> Diff: https://reviews.apache.org/r/61529/diff/8/
> 
> 
> Testing
> -------
> 
> - TestJavaActionExecutor, TestLiteWorkflowAppParser tests passed
> - java-main example on pseudo hadoop succeeded, modified workflow xml so that 
> verbose class loading information is printed out of stdout of the launcher job
> 
> 
> Thanks,
> 
> Attila Sasvari
> 
>

Reply via email to