Repository: hadoop Updated Branches: refs/heads/HDFS-6581 8b139b080 -> bfc7b7e6a
YARN-2584. TestContainerManagerSecurity fails on trunk. (Contributed by Jian He) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/a9a55db0 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/a9a55db0 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/a9a55db0 Branch: refs/heads/HDFS-6581 Commit: a9a55db0650b5e6b7d88afb883b88aba7a13cd44 Parents: 7b8df93 Author: junping_du <junping...@apache.org> Authored: Mon Sep 22 22:45:06 2014 -0700 Committer: junping_du <junping...@apache.org> Committed: Mon Sep 22 22:45:06 2014 -0700 ---------------------------------------------------------------------- hadoop-yarn-project/CHANGES.txt | 3 +++ .../nodemanager/NodeStatusUpdaterImpl.java | 2 +- .../server/TestContainerManagerSecurity.java | 28 +++++++++++++------- 3 files changed, 23 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/a9a55db0/hadoop-yarn-project/CHANGES.txt ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt index 2bc118d..ec96302 100644 --- a/hadoop-yarn-project/CHANGES.txt +++ b/hadoop-yarn-project/CHANGES.txt @@ -421,6 +421,9 @@ Release 2.6.0 - UNRELEASED YARN-2540. FairScheduler: Queue filters not working on scheduler page in RM UI. (Ashwin Shankar via kasha) + YARN-2584. TestContainerManagerSecurity fails on trunk. (Jian He via + junping_du) + Release 2.5.1 - 2014-09-05 INCOMPATIBLE CHANGES http://git-wip-us.apache.org/repos/asf/hadoop/blob/a9a55db0/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java index b9feacb..b4dcf1f 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java @@ -422,7 +422,7 @@ public class NodeStatusUpdaterImpl extends AbstractService implements @VisibleForTesting @Private public void removeCompletedContainersFromContext( - List<ContainerId>containerIds) throws IOException { + List<ContainerId> containerIds) throws IOException { Set<ContainerId> removedContainers = new HashSet<ContainerId>(); // If the AM has pulled the completedContainer it can be removed http://git-wip-us.apache.org/repos/asf/hadoop/blob/a9a55db0/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-tests/src/test/java/org/apache/hadoop/yarn/server/TestContainerManagerSecurity.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-tests/src/test/java/org/apache/hadoop/yarn/server/TestContainerManagerSecurity.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-tests/src/test/java/org/apache/hadoop/yarn/server/TestContainerManagerSecurity.java index 9bb44ca..3f82d72 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-tests/src/test/java/org/apache/hadoop/yarn/server/TestContainerManagerSecurity.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-tests/src/test/java/org/apache/hadoop/yarn/server/TestContainerManagerSecurity.java @@ -27,10 +27,8 @@ import java.security.PrivilegedAction; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -import java.util.List; import java.util.LinkedList; -import com.google.common.io.ByteArrayDataInput; -import com.google.common.io.ByteStreams; +import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -52,6 +50,7 @@ import org.apache.hadoop.yarn.api.records.ApplicationAttemptId; import org.apache.hadoop.yarn.api.records.ApplicationId; import org.apache.hadoop.yarn.api.records.ContainerId; import org.apache.hadoop.yarn.api.records.ContainerLaunchContext; +import org.apache.hadoop.yarn.api.records.ContainerState; import org.apache.hadoop.yarn.api.records.NodeId; import org.apache.hadoop.yarn.api.records.Priority; import org.apache.hadoop.yarn.api.records.Resource; @@ -80,6 +79,9 @@ import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; +import com.google.common.io.ByteArrayDataInput; +import com.google.common.io.ByteStreams; + @RunWith(Parameterized.class) public class TestContainerManagerSecurity extends KerberosSecurityTestcase { @@ -137,7 +139,7 @@ public class TestContainerManagerSecurity extends KerberosSecurityTestcase { this.conf = conf; } - @Test (timeout = 1000000) + @Test (timeout = 120000) public void testContainerManager() throws Exception { try { yarnCluster = new MiniYARNCluster(TestContainerManagerSecurity.class @@ -162,7 +164,7 @@ public class TestContainerManagerSecurity extends KerberosSecurityTestcase { } } - @Test (timeout = 500000) + @Test (timeout = 120000) public void testContainerManagerWithEpoch() throws Exception { try { yarnCluster = new MiniYARNCluster(TestContainerManagerSecurity.class @@ -311,7 +313,7 @@ public class TestContainerManagerSecurity extends KerberosSecurityTestcase { // trying to stop the container. It should not throw any exception. testStopContainer(rpc, validAppAttemptId, validNode, validContainerId, validNMToken, false); - + // Rolling over master key twice so that we can check whether older keys // are used for authentication. rollNMTokenMasterKey(nmTokenSecretManagerRM, nmTokenSecretManagerNM); @@ -326,7 +328,7 @@ public class TestContainerManagerSecurity extends KerberosSecurityTestcase { sb.append(" was recently stopped on node manager"); Assert.assertTrue(testGetContainer(rpc, validAppAttemptId, validNode, validContainerId, validNMToken, true).contains(sb.toString())); - + // Now lets remove the container from nm-memory nm.getNodeStatusUpdater().clearFinishedContainersFromCache(); @@ -355,14 +357,22 @@ public class TestContainerManagerSecurity extends KerberosSecurityTestcase { private void waitForContainerToFinishOnNM(ContainerId containerId) { Context nmContet = yarnCluster.getNodeManager(0).getNMContext(); int interval = 4 * 60; // Max time for container token to expire. + Assert.assertNotNull(nmContet.getContainers().containsKey(containerId)); while ((interval-- > 0) - && nmContet.getContainers().containsKey(containerId)) { + && !nmContet.getContainers().get(containerId) + .cloneAndGetContainerStatus().getState() + .equals(ContainerState.COMPLETE)) { try { + LOG.info("Waiting for " + containerId + " to complete."); Thread.sleep(1000); } catch (InterruptedException e) { } } - Assert.assertFalse(nmContet.getContainers().containsKey(containerId)); + // Normally, Containers will be removed from NM context after they are + // explicitly acked by RM. Now, manually remove it for testing. + yarnCluster.getNodeManager(0).getNodeStatusUpdater() + .addCompletedContainer(containerId); + nmContet.getContainers().remove(containerId); } protected void waitForNMToReceiveNMTokenKey(