diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ReplicationManager.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ReplicationManager.java index 617e231073c7..7a250687c7ee 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ReplicationManager.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ReplicationManager.java @@ -512,7 +512,7 @@ private void forceCloseContainer(final ContainerInfo container, */ private void handleUnderReplicatedContainer(final ContainerInfo container, final Set replicas) { - LOG.debug("Handling underreplicated container: {}", + LOG.debug("Handling under-replicated container: {}", container.getContainerID()); try { final ContainerID id = container.containerID(); @@ -543,14 +543,18 @@ private void handleUnderReplicatedContainer(final ContainerInfo container, List targetReplicas = new ArrayList<>(source); // Then add any pending additions targetReplicas.addAll(replicationInFlight); - - int delta = replicationFactor - getReplicaCount(id, replicas); final ContainerPlacementStatus placementStatus = containerPlacement.validateContainerPlacement( targetReplicas, replicationFactor); + int delta = replicationFactor - getReplicaCount(id, replicas); final int misRepDelta = placementStatus.misReplicationCount(); final int replicasNeeded = delta < misRepDelta ? misRepDelta : delta; + if (replicasNeeded <= 0) { + LOG.debug("Container {} meets replication requirement with " + + "inflight replicas", id); + return; + } final List excludeList = replicas.stream() .map(ContainerReplica::getDatanodeDetails) @@ -611,7 +615,7 @@ private void handleOverReplicatedContainer(final ContainerInfo container, final ContainerID id = container.containerID(); final int replicationFactor = container.getReplicationFactor().getNumber(); - // Dont consider inflight replication while calculating excess here. + // Don't consider inflight replication while calculating excess here. int excess = replicas.size() - replicationFactor - inflightDeletion.getOrDefault(id, Collections.emptyList()).size();