From 186b880ce3b953844252b4c12bf25242fea422db Mon Sep 17 00:00:00 2001 From: Folin Chen Date: Mon, 13 Jun 2016 18:11:56 +0800 Subject: [PATCH] Prevent repeat container completed --- .../scheduler/fair/FSAppAttempt.java | 29 +++++++++++++--------- 1 file changed, 17 insertions(+), 12 deletions(-) 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/fair/FSAppAttempt.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSAppAttempt.java index 1daea0a..89017a4 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSAppAttempt.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSAppAttempt.java @@ -127,6 +127,7 @@ synchronized public void containerCompleted(RMContainer rmContainer, ContainerId containerId = container.getId(); // Remove from the list of newly allocated containers if found + boolean newExists = newlyAllocatedContainers.contains(rmContainer); newlyAllocatedContainers.remove(rmContainer); // Inform the container @@ -136,23 +137,27 @@ synchronized public void containerCompleted(RMContainer rmContainer, containerStatus, event) ); - LOG.info("Completed container: " + rmContainer.getContainerId() + - " in state: " + rmContainer.getState() + " event:" + event); // Remove from the list of containers - liveContainers.remove(rmContainer.getContainerId()); + RMContainer result = liveContainers.remove(rmContainer.getContainerId()); + //prevent repeat operate + boolean needRelease = (result != null ? true : false) || newExists; - RMAuditLogger.logSuccess(getUser(), - AuditConstants.RELEASE_CONTAINER, "SchedulerApp", - getApplicationId(), containerId); + if(needRelease){ + LOG.info("Completed container: " + rmContainer.getContainerId() + + " in state: " + rmContainer.getState() + " event:" + event); + RMAuditLogger.logSuccess(getUser(), + AuditConstants.RELEASE_CONTAINER, "SchedulerApp", + getApplicationId(), containerId); - // Update usage metrics - Resource containerResource = rmContainer.getContainer().getResource(); - queue.getMetrics().releaseResources(getUser(), 1, containerResource); - this.attemptResourceUsage.decUsed(containerResource); + // Update usage metrics + Resource containerResource = rmContainer.getContainer().getResource(); + queue.getMetrics().releaseResources(getUser(), 1, containerResource); + this.attemptResourceUsage.decUsed(containerResource); - // remove from preemption map if it is completed - preemptionMap.remove(rmContainer); + // remove from preemption map if it is completed + preemptionMap.remove(rmContainer); + } // Clear resource utilization metrics cache. lastMemoryAggregateAllocationUpdateTime = -1; -- 2.8.4.windows.1