Eugene Koifman created HIVE-18978:
-------------------------------------

             Summary: ConditionalTask.addDependentTask(Task t) adds t in the 
wrong place
                 Key: HIVE-18978
                 URL: https://issues.apache.org/jira/browse/HIVE-18978
             Project: Hive
          Issue Type: Bug
          Components: Query Processor
            Reporter: Eugene Koifman


{{ConditionalTask.addDependentTask(Task t) }} is implemented like this:
{noformat}
/**
* Add a dependent task on the current conditional task. The task will not be a 
direct child of
* conditional task. Actually it will be added as child task of associated tasks.
*
* @return true if the task got added false if it already existed
*/
@Override
public boolean addDependentTask(Task<? extends Serializable> dependent) {
  boolean ret = false;
  if (getListTasks() != null) {
    ret = true;
    for (Task<? extends Serializable> tsk : getListTasks()) {
      ret = ret & tsk.addDependentTask(dependent);
    }
  }
  return ret;
}
{noformat}


     So let’s say, the tasks in the ConditionalTask are A,B,C, but they have 
children.
{noformat}
    CondTask
      |--A
         |--A1
            |-A2
      |--B
         |--B1
      |--C
        |--C1
{noformat}

     The way ConditionalTask.addDependent() is implemented, MyTask becomes a 
sibling of A1,
     B1 and C1.  So even if only 1 branch of ConditionalTask is executed (and 
parallel task
     execution is enabled), there is no guarantee (as I see) that MyTask runs 
after A2 or
     B1 or C1, which is really what is needed.




--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to