From 67842c56fe960e8014092f4708ddba9dc28caed8 Mon Sep 17 00:00:00 2001 From: Rohith Sharma K S Date: Thu, 24 May 2018 12:23:47 +0530 Subject: [PATCH] YARN-8346. Upgrading to 3.1 kills running containers with error 'Opportunistic container queue is full'. Contributed by Jason Lowe. (cherry picked from commit 4cc0c9b0baa93f5a1c0623eee353874e858a7caa) --- .../security/ContainerTokenIdentifier.java | 4 +-- .../security/TestYARNTokenIdentifier.java | 25 +++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/security/ContainerTokenIdentifier.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/security/ContainerTokenIdentifier.java index c5a649d52a1..b5116e6892b 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/security/ContainerTokenIdentifier.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/security/ContainerTokenIdentifier.java @@ -286,7 +286,7 @@ public class ContainerTokenIdentifier extends TokenIdentifier { */ public ContainerType getContainerType(){ if (!proto.hasContainerType()) { - return null; + return ContainerType.TASK; } return convertFromProtoFormat(proto.getContainerType()); } @@ -297,7 +297,7 @@ public class ContainerTokenIdentifier extends TokenIdentifier { */ public ExecutionType getExecutionType(){ if (!proto.hasExecutionType()) { - return null; + return ExecutionType.GUARANTEED; } return convertFromProtoFormat(proto.getExecutionType()); } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/security/TestYARNTokenIdentifier.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/security/TestYARNTokenIdentifier.java index 82e194381ab..44d62425deb 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/security/TestYARNTokenIdentifier.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/security/TestYARNTokenIdentifier.java @@ -36,6 +36,7 @@ import org.apache.hadoop.yarn.api.records.Priority; import org.apache.hadoop.yarn.api.records.Resource; import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.nodelabels.CommonNodeLabelsManager; +import org.apache.hadoop.yarn.proto.YarnSecurityTokenProtos.ContainerTokenIdentifierProto; import org.apache.hadoop.yarn.proto.YarnSecurityTokenProtos.YARNDelegationTokenIdentifierProto; import org.apache.hadoop.yarn.security.client.ClientToAMTokenIdentifier; import org.apache.hadoop.yarn.security.client.RMDelegationTokenIdentifier; @@ -139,6 +140,30 @@ public class TestYARNTokenIdentifier { anotherToken.getClientName(), clientName); } + @Test + public void testContainerTokenIdentifierProtoMissingFields() + throws IOException { + ContainerTokenIdentifierProto.Builder builder = + ContainerTokenIdentifierProto.newBuilder(); + ContainerTokenIdentifierProto proto = builder.build(); + Assert.assertFalse(proto.hasContainerType()); + Assert.assertFalse(proto.hasExecutionType()); + Assert.assertFalse(proto.hasNodeLabelExpression()); + + byte[] tokenData = proto.toByteArray(); + DataInputBuffer dib = new DataInputBuffer(); + dib.reset(tokenData, tokenData.length); + ContainerTokenIdentifier tid = new ContainerTokenIdentifier(); + tid.readFields(dib); + + Assert.assertEquals("container type", + ContainerType.TASK, tid.getContainerType()); + Assert.assertEquals("execution type", + ExecutionType.GUARANTEED, tid.getExecutionType()); + Assert.assertEquals("node label expression", + CommonNodeLabelsManager.NO_LABEL, tid.getNodeLabelExpression()); + } + @Test public void testContainerTokenIdentifier() throws IOException { ContainerId containerID = ContainerId.newContainerId(