YARN-4925. ContainerRequest in AMRMClient, application should be able to specify nodes/racks together with nodeLabelExpression. Contributed by Bibin A Chundatt

(cherry picked from commit f04c81c9ce)
This commit is contained in:
Naganarasimha 2016-05-19 01:30:12 +08:00
parent 4ce5a58ca9
commit 0fb6a05577
2 changed files with 12 additions and 11 deletions

View File

@ -712,16 +712,6 @@ public class AMRMClientImpl<T extends ContainerRequest> extends AMRMClient<T> {
"Cannot specify more than two node labels" "Cannot specify more than two node labels"
+ " in a single node label expression"); + " in a single node label expression");
} }
// Don't allow specify node label against ANY request
if ((containerRequest.getRacks() != null &&
(!containerRequest.getRacks().isEmpty()))
||
(containerRequest.getNodes() != null &&
(!containerRequest.getNodes().isEmpty()))) {
throw new InvalidContainerRequestException(
"Cannot specify node label with rack and node");
}
} }
private void validateContainerResourceChangeRequest( private void validateContainerResourceChangeRequest(

View File

@ -35,11 +35,11 @@ import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.TreeSet; import java.util.TreeSet;
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.CommonConfigurationKeys;
import org.apache.hadoop.io.DataOutputBuffer; import org.apache.hadoop.io.DataOutputBuffer;
import org.apache.hadoop.io.Text; import org.apache.hadoop.io.Text;
import org.apache.hadoop.security.Credentials; import org.apache.hadoop.security.Credentials;
@ -713,6 +713,17 @@ public class TestAMRMClient {
Assert.assertNull(req.getNodeLabelExpression()); Assert.assertNull(req.getNodeLabelExpression());
} }
} }
// set container with nodes and racks with labels
client.addContainerRequest(new ContainerRequest(
Resource.newInstance(1024, 1), new String[] { "rack1" },
new String[] { "node1", "node2" }, Priority.UNDEFINED, true, "y"));
for (ResourceRequest req : client.ask) {
if (ResourceRequest.ANY.equals(req.getResourceName())) {
Assert.assertEquals("y", req.getNodeLabelExpression());
} else {
Assert.assertNull(req.getNodeLabelExpression());
}
}
} }
private void verifyAddRequestFailed(AMRMClient<ContainerRequest> client, private void verifyAddRequestFailed(AMRMClient<ContainerRequest> client,