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

This commit is contained in:
Rohith Sharma K S 2018-05-24 12:23:47 +05:30
parent 7a87add4ea
commit 4cc0c9b0ba
2 changed files with 27 additions and 2 deletions

View File

@ -292,7 +292,7 @@ public long getRMIdentifier() {
*/ */
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());
} }
@ -303,7 +303,7 @@ public ContainerType getContainerType(){
*/ */
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

@ -37,6 +37,7 @@
import org.apache.hadoop.yarn.api.records.impl.pb.LogAggregationContextPBImpl; import org.apache.hadoop.yarn.api.records.impl.pb.LogAggregationContextPBImpl;
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;
@ -169,6 +170,30 @@ public void testClientToAMTokenIdentifier() throws IOException {
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 {
testContainerTokenIdentifier(false, false); testContainerTokenIdentifier(false, false);