You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@oozie.apache.org by "Robert Kanter (JIRA)" <ji...@apache.org> on 2014/06/12 04:35:01 UTC

[jira] [Created] (OOZIE-1879) Workflow Rerun causes error depending on the order of forked nodes

Robert Kanter created OOZIE-1879:
------------------------------------

             Summary: Workflow Rerun causes error depending on the order of forked nodes
                 Key: OOZIE-1879
                 URL: https://issues.apache.org/jira/browse/OOZIE-1879
             Project: Oozie
          Issue Type: Bug
          Components: core
    Affects Versions: trunk
            Reporter: Robert Kanter
            Assignee: Robert Kanter
            Priority: Blocker


Suppose you have a workflow like this:
{noformat}
start --> fork
fork --> shell1, shell2
shell1 --> join
shell2 --> join
join --> shell3
shell3 --> end
{noformat}
And all but shell3 are successful.  
Assuming you fix the problem with shell3, if you do a rerun, the following two outcomes can happen:
# If shell1 finished before shell2, then the rerun succeeds
# If shell2 finished before shell1, then the rerun fails

The error in the second outcome is simply this log message:
{noformat}
2014-05-29 17:17:03,735 ERROR org.apache.oozie.workflow.lite.LiteWorkflowInstance: SERVER[cdh5-1.cloudera.local] USER[pdvorak] GROUP[-] TOKEN[] APP[test-rerun-wf] JOB[0000004-140521220856264-oozie-oozi-W] ACTION[0000004-140521220856264-oozie-oozi-W@join] invalid execution path [/shell1/]
{noformat}

After a bunch of digging, I discovered that during a rerun with the above workflow or similar workflows, LiteWorkflowInstance#signal gets called for each action in the fork node in the order that they are listed in the fork node's XML; however, during the original run, LiteWorkflowInstance#signal gets called for each action in the order that they complete (i.e. endTime).  When these don't match, you get the above error.  The general fix for this is therefore to ensure that during a rerun, LiteWorkflowInstance#signal gets called for each action in the fork node in the order that they originally ran in.  And if you think about it, that is more correct than the current behavior anyway.  



--
This message was sent by Atlassian JIRA
(v6.2#6252)