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.