[ 
https://issues.apache.org/jira/browse/HADOOP-4149?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12635954#action_12635954
 ] 

Hemanth Yamijala commented on HADOOP-4149:
------------------------------------------

To see an impact of this bug, I submitted three jobs (using the default 
scheduler), and changed the priority of one of them. In the 
jobqueue_details.jsp page, I saw that the job which changed priority is listed 
twice ! It is the same object being referred to, but as Amar pointed out, since 
it is not deleted, it shows up twice. I think schedulers could be affected by 
this, for e.g. if they do not check for a job's run state, they may think the 
job in the run list or queued list is still to be considered and work on them.

It seems like a blocker based on this. Setting it as such. If someone feels 
not, please comment here.

> 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