YARN-8346. Upgrading to 3.1 kills running containers with error 'Opportunistic container queue is full'. Contributed by Jason Lowe.

(cherry picked from commit 4cc0c9b0ba)
This commit is contained in:
Rohith Sharma K S 2018-05-24 12:23:47 +05:30
parent 05d905f586
commit 67842c56fe
2 changed files with 27 additions and 2 deletions

View File

@ -286,7 +286,7 @@ public class ContainerTokenIdentifier extends TokenIdentifier {
*/ */
public ContainerType getContainerType(){ public ContainerType getContainerType(){
if (!proto.hasContainerType()) { if (!proto.hasContainerType()) {
return null; return ContainerType.TASK;
} }
return convertFromProtoFormat(proto.getContainerType()); return convertFromProtoFormat(proto.getContainerType());
} }
@ -297,7 +297,7 @@ public class ContainerTokenIdentifier extends TokenIdentifier {
*/ */
public ExecutionType getExecutionType(){ public ExecutionType getExecutionType(){
if (!proto.hasExecutionType()) { if (!proto.hasExecutionType()) {
return null; return ExecutionType.GUARANTEED;
} }
return convertFromProtoFormat(proto.getExecutionType()); return convertFromProtoFormat(proto.getExecutionType());
} }

View File

@ -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.api.records.Resource;
import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.conf.YarnConfiguration;
import org.apache.hadoop.yarn.nodelabels.CommonNodeLabelsManager; 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.proto.YarnSecurityTokenProtos.YARNDelegationTokenIdentifierProto;
import org.apache.hadoop.yarn.security.client.ClientToAMTokenIdentifier; import org.apache.hadoop.yarn.security.client.ClientToAMTokenIdentifier;
import org.apache.hadoop.yarn.security.client.RMDelegationTokenIdentifier; import org.apache.hadoop.yarn.security.client.RMDelegationTokenIdentifier;
@ -139,6 +140,30 @@ public class TestYARNTokenIdentifier {
anotherToken.getClientName(), clientName); 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 @Test
public void testContainerTokenIdentifier() throws IOException { public void testContainerTokenIdentifier() throws IOException {
ContainerId containerID = ContainerId.newContainerId( ContainerId containerID = ContainerId.newContainerId(