JobQueueJobInProgressListener.jobUpdated() might not work as expected
---------------------------------------------------------------------

                 Key: HADOOP-4149
                 URL: https://issues.apache.org/jira/browse/HADOOP-4149
             Project: Hadoop Core
          Issue Type: Bug
          Components: mapred
            Reporter: Amar Kamat


{{JobQueueJobInProgressListener}} uses a {{TreeSet}} to store the sorted 
collection of {{JobInProgress}} objects. The comparator used to sort the JIPs 
follow the following order
- priority (>=)
- start time (<=)
- job id [jt-identifier, job-index] (<=)

If any JIP object is changed w.r.t priority or start-time, then the TreeSet 
will be inconsistent. Hence doing  a delete might not work. Consider the 
following
1) jobs are submitted in the following order 
||number||jobid||priority||
|1|j1|NORMAL|
|2|j2|LOW|
|3|j3|NORMAL|

2) The sorted collection will be in the order : {{j1,j3,j2}}

3) If job3's priority is changed to LOW then the collection wont change but 
delete will bail out on j1 itself as the comparator will return a -ve number. 
TreeSet uses the comparator both for sorting and deleting. If  i indicates the 
index in the collection and obj represents the object under consideration, then 
looks like TreeSet.remove(obj) follows something like  :
- continue to search if the compare(i, obj) is -ve
- bail out if the compare(i, obj) is +ve
- delete the obj of compare(i,obj) == 0

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to