This is an automated email from the ASF dual-hosted git repository.
siddhant pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new 827fb8180c HDDS-9747. Incorrect sorting order for all unhealthy
replicas in RatisOverReplicationHandler (#5689)
827fb8180c is described below
commit 827fb8180ca4383ac03720314e58befcd1b60d41
Author: Stephen O'Donnell <[email protected]>
AuthorDate: Wed Nov 29 11:54:58 2023 +0000
HDDS-9747. Incorrect sorting order for all unhealthy replicas in
RatisOverReplicationHandler (#5689)
---
.../replication/RatisOverReplicationHandler.java | 2 +-
.../TestRatisOverReplicationHandler.java | 41 ++++++++++++++++++++++
2 files changed, 42 insertions(+), 1 deletion(-)
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/RatisOverReplicationHandler.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/RatisOverReplicationHandler.java
index 7974e72bac..a0892b28d2 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/RatisOverReplicationHandler.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/RatisOverReplicationHandler.java
@@ -231,7 +231,7 @@ public class RatisOverReplicationHandler
// prefer deleting replicas with lower sequence IDs
return replicas.stream()
.sorted(Comparator.comparingLong(ContainerReplica::getSequenceId)
- .reversed())
+ .thenComparing(ContainerReplica::hashCode))
.collect(Collectors.toList());
}
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestRatisOverReplicationHandler.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestRatisOverReplicationHandler.java
index ec4259bac6..f69715f9b4 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestRatisOverReplicationHandler.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestRatisOverReplicationHandler.java
@@ -44,6 +44,7 @@ import org.slf4j.event.Level;
import java.io.IOException;
import java.util.Collections;
+import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -236,6 +237,46 @@ public class TestRatisOverReplicationHandler {
getOverReplicatedHealthResult(), 0);
}
+ @Test
+ public void testOverReplicatedAllUnhealthySameBCSID()
+ throws IOException {
+ Set<ContainerReplica> replicas = createReplicas(container.containerID(),
+ ContainerReplicaProto.State.UNHEALTHY, 0, 0, 0, 0);
+
+ ContainerReplica shouldDelete = replicas.stream()
+ .sorted(Comparator.comparingLong(ContainerReplica::hashCode))
+ .findFirst().get();
+
+ Set<Pair<DatanodeDetails, SCMCommand<?>>> commands =
+ testProcessing(replicas, Collections.emptyList(),
+ getOverReplicatedHealthResult(), 1);
+ Pair<DatanodeDetails, SCMCommand<?>> commandPair
+ = commands.iterator().next();
+ assertEquals(shouldDelete.getDatanodeDetails(),
+ commandPair.getKey());
+ }
+
+ @Test
+ public void testOverReplicatedAllUnhealthyPicksLowestBCSID()
+ throws IOException {
+ final long sequenceID = 20;
+ Set<ContainerReplica> replicas = new HashSet<>();
+ ContainerReplica lowestSequenceIDReplica = createContainerReplica(
+ container.containerID(), 0, IN_SERVICE, State.UNHEALTHY, sequenceID);
+ replicas.add(lowestSequenceIDReplica);
+ for (int i = 1; i < 4; i++) {
+ replicas.add(createContainerReplica(container.containerID(), 0,
+ IN_SERVICE, State.UNHEALTHY, sequenceID + i));
+ }
+ Set<Pair<DatanodeDetails, SCMCommand<?>>> commands =
+ testProcessing(replicas, Collections.emptyList(),
+ getOverReplicatedHealthResult(), 1);
+ Pair<DatanodeDetails, SCMCommand<?>> commandPair
+ = commands.iterator().next();
+ assertEquals(lowestSequenceIDReplica.getDatanodeDetails(),
+ commandPair.getKey());
+ }
+
/**
* Closed container with 4 closed replicas and 1 quasi closed replica. This
* container is over replicated and the handler should create a delete
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]