Browse Source

YARN-6327. Removing queues from CapacitySchedulerQueueManager and ParentQueue should be done with iterator. Contributed by Jonathan Hung.

Naganarasimha 8 years ago
parent
commit
0a3aa40fe7

+ 5 - 2
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacitySchedulerQueueManager.java

@@ -22,6 +22,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 import java.util.Set;
 import java.util.Set;
@@ -312,10 +313,12 @@ public class CapacitySchedulerQueueManager implements SchedulerQueueManager<
         existingQueues.put(queueName, queue);
         existingQueues.put(queueName, queue);
       }
       }
     }
     }
-    for (Map.Entry<String, CSQueue> e : existingQueues.entrySet()) {
+    for (Iterator<Map.Entry<String, CSQueue>> itr = existingQueues.entrySet()
+        .iterator(); itr.hasNext();) {
+      Map.Entry<String, CSQueue> e = itr.next();
       String queueName = e.getKey();
       String queueName = e.getKey();
       if (!newQueues.containsKey(queueName)) {
       if (!newQueues.containsKey(queueName)) {
-        existingQueues.remove(queueName);
+        itr.remove();
       }
       }
     }
     }
   }
   }

+ 4 - 2
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/ParentQueue.java

@@ -333,10 +333,12 @@ public class ParentQueue extends AbstractCSQueue {
       }
       }
 
 
       // remove the deleted queue in the refreshed xml.
       // remove the deleted queue in the refreshed xml.
-      for (Map.Entry<String, CSQueue> e : currentChildQueues.entrySet()) {
+      for (Iterator<Map.Entry<String, CSQueue>> itr = currentChildQueues
+          .entrySet().iterator(); itr.hasNext();) {
+        Map.Entry<String, CSQueue> e = itr.next();
         String queueName = e.getKey();
         String queueName = e.getKey();
         if (!newChildQueues.containsKey(queueName)) {
         if (!newChildQueues.containsKey(queueName)) {
-          currentChildQueues.remove(queueName);
+          itr.remove();
         }
         }
       }
       }