diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestContainerResourceUsage.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestContainerResourceUsage.java index 74c70d8..7810e17 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestContainerResourceUsage.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestContainerResourceUsage.java @@ -310,6 +310,7 @@ private void amRestartTests(boolean keepRunningContainers) amContainerId.getContainerId(), ContainerState.COMPLETE); rm.waitForState(am0.getApplicationAttemptId(), RMAppAttemptState.FAILED); + rm.drainEvents(); long memorySeconds = 0; long vcoreSeconds = 0; @@ -329,6 +330,7 @@ private void amRestartTests(boolean keepRunningContainers) } } } else { + waitforContainerState(rmContainers, ContainerState.COMPLETE, 10); // If keepRunningContainers is false, all live containers should now // be completed. Calculate the resource usage metrics for all of them. for (RMContainer c : rmContainers) { @@ -383,6 +385,9 @@ private void amRestartTests(boolean keepRunningContainers) MockRM.finishAMAndVerifyAppState(app, rm, nm, am1); + rm.drainEvents(); + + waitforContainerState(rmContainers, ContainerState.COMPLETE, 10); // Calculate container usage metrics for second attempt. for (RMContainer c : rmContainers) { AggregateAppResourceUsage ru = calculateContainerResourceMetrics(c); @@ -401,6 +406,23 @@ private void amRestartTests(boolean keepRunningContainers) return; } + private void waitforContainerState(Collection rmContainers, + ContainerState complete, int tick) throws InterruptedException { + while (tick > 0) { + int counter = 0; + for (RMContainer rmcont : rmContainers) { + if (rmcont.getContainerState() == ContainerState.COMPLETE) { + counter++; + } + } + if (rmContainers.size() == counter) { + return; + } + Thread.sleep(1000); + tick--; + } + } + private AggregateAppResourceUsage calculateContainerResourceMetrics( RMContainer rmContainer) { Resource resource = rmContainer.getContainer().getResource();