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(){
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());
}

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.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(