[ https://issues.apache.org/jira/browse/MAPREDUCE-1372?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12799126#action_12799126 ]
Arun C Murthy commented on MAPREDUCE-1372: ------------------------------------------ I guess making nodesAtMaxLevel a synchronized Set and then locking nodesAtMaxLevel in findNewTask is an option since the locking order will be JT, JIP, nodesAtMaxLevel in one path and JIP, nodesAtMaxLevel in the other - but really ugly. Another option is to make nodesAtMaxLevel a synchronized ArrayList and then use ArrayList.get rather than iterate over it in JIP.findNewTask i.e. {noformat} JIP.findNewTask: int size = JobTracker.getNumNodesAtMaxLevel(); for (int i = 0; i < size; ++i) { Node n = JobTracker.getNthNodeAtMaxLevel(i); // ... // do something with n // ... } {noformat} However, we'll need to ensure JobTracker.nodesAtMaxLevel doesn't contain dups - something which is currently ensure by having nodesAtMaxLevel be a Set. > ConcurrentModificationException in JobInProgress > ------------------------------------------------ > > Key: MAPREDUCE-1372 > URL: https://issues.apache.org/jira/browse/MAPREDUCE-1372 > Project: Hadoop Map/Reduce > Issue Type: Bug > Components: jobtracker > Affects Versions: 0.20.1 > Reporter: Amareshwari Sriramadasu > Priority: Blocker > Fix For: 0.21.0 > > > We have seen the following ConcurrentModificationException in one of our > clusters > {noformat} > java.io.IOException: java.util.ConcurrentModificationException > at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793) > at java.util.HashMap$KeyIterator.next(HashMap.java:828) > at > org.apache.hadoop.mapred.JobInProgress.findNewMapTask(JobInProgress.java:2018) > at > org.apache.hadoop.mapred.JobInProgress.obtainNewMapTask(JobInProgress.java:1077) > at > org.apache.hadoop.mapred.CapacityTaskScheduler$MapSchedulingMgr.obtainNewTask(CapacityTaskScheduler.java:796) > at > org.apache.hadoop.mapred.CapacityTaskScheduler$TaskSchedulingMgr.getTaskFromQueue(CapacityTaskScheduler.java:589) > at > org.apache.hadoop.mapred.CapacityTaskScheduler$TaskSchedulingMgr.assignTasks(CapacityTaskScheduler.java:677) > at > org.apache.hadoop.mapred.CapacityTaskScheduler$TaskSchedulingMgr.access$500(CapacityTaskScheduler.java:348) > at > org.apache.hadoop.mapred.CapacityTaskScheduler.addMapTask(CapacityTaskScheduler.java:1397) > at > org.apache.hadoop.mapred.CapacityTaskScheduler.assignTasks(CapacityTaskScheduler.java:1349) > at org.apache.hadoop.mapred.JobTracker.heartbeat(JobTracker.java:2976) > at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) > at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:508) > at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:959) > at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:955) > at java.security.AccessController.doPrivileged(Native Method) > at javax.security.auth.Subject.doAs(Subject.java:396) > at org.apache.hadoop.ipc.Server$Handler.run(Server.java:953) > {noformat} -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.