From 2b1d8aedbb669cf412465bf7a5762c8aeda52faa Mon Sep 17 00:00:00 2001 From: Nanda kumar Date: Thu, 25 Jul 2019 15:07:07 +0530 Subject: [PATCH] HDDS-1850. ReplicationManager should consider inflight replication and deletion while picking datanode for re-replication. Signed-off-by: Anu Engineer --- .../hadoop/hdds/scm/container/ReplicationManager.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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 33bf931b3a..0557ea10d2 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 @@ -483,8 +483,14 @@ public class ReplicationManager { final int replicationFactor = container .getReplicationFactor().getNumber(); final int delta = replicationFactor - getReplicaCount(id, replicas); + final List excludeList = replicas.stream() + .map(ContainerReplica::getDatanodeDetails) + .collect(Collectors.toList()); + inflightReplication.get(id).stream().map(r -> r.datanode) + .forEach(excludeList::add); final List selectedDatanodes = containerPlacement - .chooseDatanodes(source, null, delta, container.getUsedBytes()); + .chooseDatanodes(excludeList, null, delta, + container.getUsedBytes()); LOG.info("Container {} is under replicated. Expected replica count" + " is {}, but found {}.", id, replicationFactor,