diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt index 4141f47b94d..cfc8b238135 100644 --- a/hadoop-yarn-project/CHANGES.txt +++ b/hadoop-yarn-project/CHANGES.txt @@ -179,6 +179,9 @@ Release 0.23.5 - UNRELEASED YARN-178. Fix custom ProcessTree instance creation (Radim Kolar via bobby) + YARN-180. Capacity scheduler - containers that get reserved create + container token to early (acmurthy and bobby) + Release 0.23.4 - UNRELEASED INCOMPATIBLE CHANGES diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/LeafQueue.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/LeafQueue.java index 614378aebd6..e183a2d7020 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/LeafQueue.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/LeafQueue.java @@ -1188,34 +1188,32 @@ public class LeafQueue implements CSQueue { return (rmContainer != null) ? rmContainer.getContainer() : createContainer(application, node, capability, priority); } - - public Container createContainer(FiCaSchedulerApp application, FiCaSchedulerNode node, + Container createContainer(FiCaSchedulerApp application, FiCaSchedulerNode node, Resource capability, Priority priority) { - + NodeId nodeId = node.getRMNode().getNodeID(); ContainerId containerId = BuilderUtils.newContainerId(application .getApplicationAttemptId(), application.getNewContainerId()); - ContainerToken containerToken = null; - - // If security is enabled, send the container-tokens too. - if (UserGroupInformation.isSecurityEnabled()) { - containerToken = - containerTokenSecretManager.createContainerToken(containerId, nodeId, - application.getUser(), capability); - if (containerToken == null) { - return null; // Try again later. - } - } - + // Create the container Container container = BuilderUtils.newContainer(containerId, nodeId, node.getRMNode().getHttpAddress(), capability, priority, - containerToken); - + null); + return container; } - + + /** + * Create ContainerToken, only in secure-mode + */ + ContainerToken createContainerToken( + FiCaSchedulerApp application, Container container) { + return containerTokenSecretManager.createContainerToken( + container.getId(), container.getNodeId(), + application.getUser(), container.getResource()); + } + private Resource assignContainer(Resource clusterResource, FiCaSchedulerNode node, FiCaSchedulerApp application, Priority priority, ResourceRequest request, NodeType type, RMContainer rmContainer) { @@ -1251,6 +1249,17 @@ public class LeafQueue implements CSQueue { unreserve(application, priority, node, rmContainer); } + // Create container tokens in secure-mode + if (UserGroupInformation.isSecurityEnabled()) { + ContainerToken containerToken = + createContainerToken(application, container); + if (containerToken == null) { + // Something went wrong... + return Resources.none(); + } + container.setContainerToken(containerToken); + } + // Inform the application RMContainer allocatedContainer = application.allocate(type, node, priority, request, container);