[ 
https://issues.apache.org/jira/browse/OOZIE-1195?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13567046#comment-13567046
 ] 

Robert Kanter commented on OOZIE-1195:
--------------------------------------

I can't quite follow what you were doing with the XML; can you re-explain what 
the issue is (and also use formatting tags like \{code\} or \{noformat\} to 
make the XML and stack trace easier to read)?

Not allowing end nodes in a fork-join path is the correct behavior because an 
end node means that the workflow completed successfully, but if its in a 
fork-join then the other paths will still be executing actions when we get to 
the end node, meaning that those paths didn't actually finish when the workflow 
finishes, so its not _right_ to call it a success (I'm not actually sure what 
Oozie does if you disable fork-join validation and try this but I'd guess that 
it will either kill the other paths, which doesn't sound like a success to me, 
or it will keep executing those paths even though the workflow itself has 
finished, which isn't good either).  
On the other hand, a kill node is allowed because that will cause Oozie to kill 
the actions in the other path when it kills the workflow and so there's no 
ambiguity here.  Does this clarify things?  
                
> Invalid transition -- nodes of type end are not allowed within Fork/Join
> ------------------------------------------------------------------------
>
>                 Key: OOZIE-1195
>                 URL: https://issues.apache.org/jira/browse/OOZIE-1195
>             Project: Oozie
>          Issue Type: Bug
>          Components: workflow
>    Affects Versions: trunk
>            Reporter: michelle chiang
>            Priority: Minor
>
> created a workflow to verify oozie-1035. the xml is very similar to the 
> example in oozie-1142. however the job failed to submit. the job can submit 
> when disable fork-join validation as of oozie-1034.
> xml
> ====
> <workflow-app xmlns='uri:oozie:workflow:0.4' name='forkjoin-errto1'>
>     <start to='fork1' />
>     <fork name='fork1'>
>         <path start='java_fail1' />
>         <path start='java_fail2' />
>         <path start='java_pass' />
>     </fork>
>     <action name='java_fail1'>
>         <!-- skip -->
>         <ok to="join1" />
>         <error to="emailfailure" />
>     </action>
>     <action name='java_fail2'>
>         <!-- skip -->
>         <ok to="join1" />
>         <error to="emailfailure" />
>     </action>
>     <action name='java_pass'>
>         <!-- skip -->
>         <ok to="join1" />
>         <error to="fail" />
>     </action>
>     <join name="join1" to="end"/>
>     <action name="emailfailure">
>         <!-- skip -->
>         <ok to="end" />
>         <error to="fail" />
>     </action>
>     <kill name="fail">
>         <message>Fork-Join validation failed, error 
> message[${wf:errorMessage(wf:lastErrorNode())}]</message>
>     </kill>
>     <end name='end' />
> </workflow-app>
> log
> ===
> Error: E0737 : E0737: Invalid transition from node [emailfailure] to node 
> [end] -- nodes of type end are not allowed within Fork/Join
> 2013-01-30 20:52:49,592 ERROR SubmitXCommand:538 - USER[mchiang] GROUP[users] 
> TOKEN[-] APP[-] JOB[-] ACTION[-] XException, 
> org.apache.oozie.command.CommandException: E0737: Invalid transition from 
> node [emailfailure] to node [end] -- nodes of type end are not allowed within 
> Fork/Join
>         at 
> org.apache.oozie.command.wf.SubmitXCommand.execute(SubmitXCommand.java:227)
>         at 
> org.apache.oozie.command.wf.SubmitXCommand.execute(SubmitXCommand.java:71)
>         at org.apache.oozie.command.XCommand.call(XCommand.java:277)
>         at org.apache.oozie.DagEngine.submitJob(DagEngine.java:109)
>         at 
> org.apache.oozie.servlet.V1JobsServlet.submitWorkflowJob(V1JobsServlet.java:180)
>         at 
> org.apache.oozie.servlet.V1JobsServlet.submitJob(V1JobsServlet.java:80)
>         at 
> org.apache.oozie.servlet.BaseJobsServlet.doPost(BaseJobsServlet.java:100)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
>         at 
> org.apache.oozie.servlet.JsonRestServlet.service(JsonRestServlet.java:286)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
>         at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
>         at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at 
> com.yahoo.oozie.security.authentication.filter.YAuthFilter$2.doFilter(YAuthFilter.java:135)
>         at 
> org.apache.hadoop.security.authentication.server.AuthenticationFilter.doFilter(AuthenticationFilter.java:372)
>         at 
> com.yahoo.oozie.security.authentication.filter.YAuthFilter.doFilter(YAuthFilter.java:139)
>         at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at 
> yjava.servlet.FilterChainInvoker$ServletFilterChainInvoker.invoke(FilterChainInvoker.java:49)
>         at yjava.servlet.filter.YHdrsFilter.doFilter(YHdrsFilter.java:68)
>         at yjava.servlet.filter.YHdrsFilter.doFilter(YHdrsFilter.java:52)
>         at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at 
> yjava.servlet.FilterChainInvoker$ServletFilterChainInvoker.invoke(FilterChainInvoker.java:49)
>         at yjava.cookie.CookieDataFilter.doFilter(CookieDataFilter.java:447)
>         at yjava.cookie.CookieDataFilter.doFilter(CookieDataFilter.java:219)
>         at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at 
> yjava.servlet.FilterChainInvoker$ServletFilterChainInvoker.invoke(FilterChainInvoker.java:49)
>         at 
> yjava.servlet.filter.DoNotTrackFilter.doFilter(DoNotTrackFilter.java:104)
>         at 
> yjava.servlet.filter.DoNotTrackFilter.doFilter(DoNotTrackFilter.java:50)
>         at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at 
> yjava.servlet.FilterChainInvoker$ServletFilterChainInvoker.invoke(FilterChainInvoker.java:49)
>         at yjava.remote.ip.RemoteIPFilter.doFilter(RemoteIPFilter.java:104)
>         at yjava.remote.ip.RemoteIPFilter.doFilter(RemoteIPFilter.java:65)
>         at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at 
> yjava.servlet.FilterChainInvoker$ServletFilterChainInvoker.invoke(FilterChainInvoker.java:49)
>         at 
> yjava.security.yiv.servlet.InputValidationFilter.doFilter(InputValidationFilter.java:219)
>         at 
> yjava.security.yiv.servlet.InputValidationFilter.doFilter(InputValidationFilter.java:143)
>         at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at 
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
>         at 
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
>         at 
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>         at 
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
>         at 
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>         at 
> yjava.tomcat.valves.YahooConnectionValve.invoke(YahooConnectionValve.java:191)
>         at 
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
>         at 
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
>         at 
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
>         at 
> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
>         at java.lang.Thread.run(Thread.java:662)
> Caused by: org.apache.oozie.workflow.WorkflowException: E0737: Invalid 
> transition from node [emailfailure] to node [end] -- nodes of type end are 
> not allowed within Fork/Join
>         at 
> org.apache.oozie.workflow.lite.LiteWorkflowAppParser.validateForkJoin(LiteWorkflowAppParser.java:278)
>         at 
> org.apache.oozie.workflow.lite.LiteWorkflowAppParser.validateForkJoin(LiteWorkflowAppParser.java:219)
>         at 
> org.apache.oozie.workflow.lite.LiteWorkflowAppParser.validateForkJoin(LiteWorkflowAppParser.java:222)
>         at 
> org.apache.oozie.workflow.lite.LiteWorkflowAppParser.validateForkJoin(LiteWorkflowAppParser.java:234)
>         at 
> org.apache.oozie.workflow.lite.LiteWorkflowAppParser.validateForkJoin(LiteWorkflowAppParser.java:214)
>         at 
> org.apache.oozie.workflow.lite.LiteWorkflowAppParser.validateForkJoin(LiteWorkflowAppParser.java:174)
>         at 
> org.apache.oozie.workflow.lite.LiteWorkflowAppParser.validateAndParse(LiteWorkflowAppParser.java:141)
>         at 
> org.apache.oozie.workflow.lite.LiteWorkflowLib.parseDef(LiteWorkflowLib.java:54)
>         at 
> org.apache.oozie.service.LiteWorkflowAppService.parseDef(LiteWorkflowAppService.java:47)
>         at 
> org.apache.oozie.service.LiteWorkflowAppService.parseDef(LiteWorkflowAppService.java:42)
>         at 
> org.apache.oozie.command.wf.SubmitXCommand.execute(SubmitXCommand.java:123)
>         ... 52 more
> 2013-01-30 20:52:49,593  WARN V1JobsServlet:544 - USER[mchiang] GROUP[users] 
> TOKEN[-] APP[-] JOB[-] ACTION[-] URL[POST 
> http://gsbl90547.blue.ygrid.yahoo.com:4080/oozie/v1/jobs?action=start] 
> error[E0737], E0737: Invalid transition from node [emailfailure] to node 
> [end] -- nodes of type end are not allowed within Fork/Join
> org.apache.oozie.servlet.XServletException: E0737: Invalid transition from 
> node [emailfailure] to node [end] -- nodes of type end are not allowed within 
> Fork/Join
>         at 
> org.apache.oozie.servlet.V1JobsServlet.submitWorkflowJob(V1JobsServlet.java:185)
>         at 
> org.apache.oozie.servlet.V1JobsServlet.submitJob(V1JobsServlet.java:80)
>         at 
> org.apache.oozie.servlet.BaseJobsServlet.doPost(BaseJobsServlet.java:100)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
>         at 
> org.apache.oozie.servlet.JsonRestServlet.service(JsonRestServlet.java:286)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
>         at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
>         at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at 
> com.yahoo.oozie.security.authentication.filter.YAuthFilter$2.doFilter(YAuthFilter.java:135)
>         at 
> org.apache.hadoop.security.authentication.server.AuthenticationFilter.doFilter(AuthenticationFilter.java:372)
>         at 
> com.yahoo.oozie.security.authentication.filter.YAuthFilter.doFilter(YAuthFilter.java:139)
>         at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at 
> yjava.servlet.FilterChainInvoker$ServletFilterChainInvoker.invoke(FilterChainInvoker.java:49)
>         at yjava.servlet.filter.YHdrsFilter.doFilter(YHdrsFilter.java:68)
>         at yjava.servlet.filter.YHdrsFilter.doFilter(YHdrsFilter.java:52)
>         at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at 
> yjava.servlet.FilterChainInvoker$ServletFilterChainInvoker.invoke(FilterChainInvoker.java:49)
>         at yjava.cookie.CookieDataFilter.doFilter(CookieDataFilter.java:447)
>         at yjava.cookie.CookieDataFilter.doFilter(CookieDataFilter.java:219)
>         at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at 
> yjava.servlet.FilterChainInvoker$ServletFilterChainInvoker.invoke(FilterChainInvoker.java:49)
>         at 
> yjava.servlet.filter.DoNotTrackFilter.doFilter(DoNotTrackFilter.java:104)
>         at 
> yjava.servlet.filter.DoNotTrackFilter.doFilter(DoNotTrackFilter.java:50)
>         at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at 
> yjava.servlet.FilterChainInvoker$ServletFilterChainInvoker.invoke(FilterChainInvoker.java:49)
>         at yjava.remote.ip.RemoteIPFilter.doFilter(RemoteIPFilter.java:104)
>         at yjava.remote.ip.RemoteIPFilter.doFilter(RemoteIPFilter.java:65)
>         at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at 
> yjava.servlet.FilterChainInvoker$ServletFilterChainInvoker.invoke(FilterChainInvoker.java:49)
>         at 
> yjava.security.yiv.servlet.InputValidationFilter.doFilter(InputValidationFilter.java:219)
>         at 
> yjava.security.yiv.servlet.InputValidationFilter.doFilter(InputValidationFilter.java:143)
>         at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at 
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
>         at 
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
>         at 
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>         at 
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
>         at 
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>         at 
> yjava.tomcat.valves.YahooConnectionValve.invoke(YahooConnectionValve.java:191)
>         at 
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
>         at 
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
>         at 
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
>         at 
> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
>         at java.lang.Thread.run(Thread.java:662)
> Caused by: org.apache.oozie.DagEngineException: E0737: Invalid transition 
> from node [emailfailure] to node [end] -- nodes of type end are not allowed 
> within Fork/Join
>         at org.apache.oozie.DagEngine.submitJob(DagEngine.java:116)
>         at 
> org.apache.oozie.servlet.V1JobsServlet.submitWorkflowJob(V1JobsServlet.java:180)
>         ... 48 more
> Caused by: org.apache.oozie.command.CommandException: E0737: Invalid 
> transition from node [emailfailure] to node [end] -- nodes of type end are 
> not allowed within Fork/Join
>         at 
> org.apache.oozie.command.wf.SubmitXCommand.execute(SubmitXCommand.java:227)
>         at 
> org.apache.oozie.command.wf.SubmitXCommand.execute(SubmitXCommand.java:71)
>         at org.apache.oozie.command.XCommand.call(XCommand.java:277)
>         at org.apache.oozie.DagEngine.submitJob(DagEngine.java:109)
>         ... 49 more
> Caused by: org.apache.oozie.workflow.WorkflowException: E0737: Invalid 
> transition from node [emailfailure] to node [end] -- nodes of type end are 
> not allowed within Fork/Join
>         at 
> org.apache.oozie.workflow.lite.LiteWorkflowAppParser.validateForkJoin(LiteWorkflowAppParser.java:278)
>         at 
> org.apache.oozie.workflow.lite.LiteWorkflowAppParser.validateForkJoin(LiteWorkflowAppParser.java:219)
>         at 
> org.apache.oozie.workflow.lite.LiteWorkflowAppParser.validateForkJoin(LiteWorkflowAppParser.java:222)
>         at 
> org.apache.oozie.workflow.lite.LiteWorkflowAppParser.validateForkJoin(LiteWorkflowAppParser.java:234)
>         at 
> org.apache.oozie.workflow.lite.LiteWorkflowAppParser.validateForkJoin(LiteWorkflowAppParser.java:214)
>         at 
> org.apache.oozie.workflow.lite.LiteWorkflowAppParser.validateForkJoin(LiteWorkflowAppParser.java:174)
>         at 
> org.apache.oozie.workflow.lite.LiteWorkflowAppParser.validateAndParse(LiteWorkflowAppParser.java:141)
>         at 
> org.apache.oozie.workflow.lite.LiteWorkflowLib.parseDef(LiteWorkflowLib.java:54)
>         at 
> org.apache.oozie.service.LiteWorkflowAppService.parseDef(LiteWorkflowAppService.java:47)
>         at 
> org.apache.oozie.service.LiteWorkflowAppService.parseDef(LiteWorkflowAppService.java:42)
>         at 
> org.apache.oozie.command.wf.SubmitXCommand.execute(SubmitXCommand.java:123)
>         ... 52 more

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to