瀏覽代碼

Tests for container cleanup events in TestApplicationCleanup and related fixes.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/MR-279@1153438 13f79535-47bb-0310-9956-ffa450edef68
Vinod Kumar Vavilapalli 14 年之前
父節點
當前提交
43ee164d1c

+ 1 - 1
mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java

@@ -171,7 +171,7 @@ public class RMAppImpl implements RMApp {
 
   @Override
   public ApplicationId getApplicationId() {
-    return this.getApplicationId();
+    return this.applicationId;
   }
 
   @Override

+ 2 - 0
mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/RMAppAttemptImpl.java

@@ -351,6 +351,8 @@ public class RMAppAttemptImpl implements RMAppAttempt {
       for (Container cont : newlyAllocatedContainers) {
         ranNodes.add(cont.getNodeId());//add to the nodes set when these containers
         //are pulled by AM
+        eventHandler.handle(
+            new RMContainerEvent(cont.getId(), RMContainerEventType.ACQUIRED));
       }
       this.newlyAllocatedContainers.clear();
       return returnList;

+ 1 - 1
mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmnode/RMNodeCleanContainerEvent.java

@@ -8,7 +8,7 @@ public class RMNodeCleanContainerEvent extends RMNodeEvent {
   private ContainerId contId;
 
   public RMNodeCleanContainerEvent(NodeId nodeId, ContainerId contId) {
-    super(nodeId, RMNodeEventType.CLEANUP_APP);
+    super(nodeId, RMNodeEventType.CLEANUP_CONTAINER);
     this.contId = contId;
   }
 

+ 19 - 5
mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestApplicationCleanup.java

@@ -5,9 +5,11 @@ import java.util.List;
 
 import junit.framework.Assert;
 
+import org.apache.hadoop.yarn.api.records.ApplicationId;
 import org.apache.hadoop.yarn.api.records.Container;
 import org.apache.hadoop.yarn.api.records.ContainerId;
 import org.apache.hadoop.yarn.api.records.ResourceRequest;
+import org.apache.hadoop.yarn.server.api.records.HeartbeatResponse;
 import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMApp;
 import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttempt;
 import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttemptState;
@@ -60,13 +62,25 @@ public class TestApplicationCleanup {
     am.unregisterAppAttempt();
     am.waitForState(RMAppAttemptState.FINISHED);
 
-    int size = nm1.nodeHeartbeat(true).getApplicationsToCleanupList().size();
-    while(size < 1) {
+    int cleanedConts = 0;
+    int cleanedApps = 0;
+    List<ContainerId> contsToClean = null;
+    List<ApplicationId> apps = null;
+    
+    //currently only containers are cleaned via this
+    //AM container is cleaned via container launcher
+    while (cleanedConts < 2 || cleanedApps < 1) {
+      HeartbeatResponse resp = nm1.nodeHeartbeat(true);
+      contsToClean = resp.getContainersToCleanupList();
+      apps = resp.getApplicationsToCleanupList();
+      Log.info("Waiting to get cleanup events.." + cleanedConts);
+      cleanedConts += contsToClean.size();
+      cleanedApps += apps.size();
       Thread.sleep(1000);
-      Log.info("Waiting to get application cleanup..");
-      size = nm1.nodeHeartbeat(true).getApplicationsToCleanupList().size();
     }
-    Assert.assertEquals(1, size);
+    
+    Assert.assertEquals(1, apps.size());
+    Assert.assertEquals(app.getApplicationId(), apps.get(0));
 
     rm.stop();
   }