nandakumar131 commented on code in PR #7869:
URL: https://github.com/apache/ozone/pull/7869#discussion_r1954943628
##########
hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/health/TestQuasiClosedContainerHandler.java:
##########
@@ -177,6 +177,91 @@ public void
testQuasiClosedWithAllUniqueOriginSendsForceClose() {
.sendCloseContainerReplicaCommand(any(), any(), anyBoolean());
}
+ /**
+ * When a container is QUASI_CLOSED with some unhealthy and all 3 are
reported with unique
+ * origins, it should be forced closed.
+ */
+ @Test
+ public void testQuasiClosedWithAllUniqueOriginAndUnhealthySendsForceClose() {
+ ContainerInfo containerInfo = ReplicationTestUtil.createContainerInfo(
+ ratisReplicationConfig, 1, QUASI_CLOSED);
+ // These 3 replicas will have the same BCSID and unique origin node ids
+ Set<ContainerReplica> containerReplicas = ReplicationTestUtil
+ .createReplicas(containerInfo.containerID(),
+ State.QUASI_CLOSED, 0, 0);
+ containerReplicas.addAll(ReplicationTestUtil
+ .createReplicas(containerInfo.containerID(),
+ State.UNHEALTHY, 0));
+ ContainerCheckRequest request = new ContainerCheckRequest.Builder()
+ .setPendingOps(Collections.emptyList())
+ .setReport(new ReplicationManagerReport())
+ .setContainerInfo(containerInfo)
+ .setContainerReplicas(containerReplicas)
+ .build();
+ ContainerCheckRequest readRequest = new ContainerCheckRequest.Builder()
+ .setPendingOps(Collections.emptyList())
+ .setReport(new ReplicationManagerReport())
+ .setContainerInfo(containerInfo)
+ .setContainerReplicas(containerReplicas)
+ .setReadOnly(true)
+ .build();
+
+ assertFalse(quasiClosedContainerHandler.handle(request));
+ assertFalse(quasiClosedContainerHandler.handle(readRequest));
+ verify(replicationManager, times(2))
+ .sendCloseContainerReplicaCommand(any(), any(), anyBoolean());
+ }
+
+ /**
+ * If it's possible to force close replicas then only replicas with the
+ * highest Sequence ID (also known as BCSID) should be closed.
+ */
+ @Test
+ public void testQuasiClosedWithUnhealthyHavingHighestSeq() {
+ final ContainerInfo containerInfo =
+ getContainer(HddsProtos.LifeCycleState.QUASI_CLOSED);
+ containerInfo.setUsedBytes(99);
+ final ContainerID id = containerInfo.containerID();
+
+ // create replicas with unique origin DNs
+ DatanodeDetails dnOne = randomDatanodeDetails();
+ DatanodeDetails dnTwo = randomDatanodeDetails();
+ DatanodeDetails dnThree = randomDatanodeDetails();
+
+ // 1001 is the highest sequence id
+ final ContainerReplica replicaOne = getReplicas(
+ id, State.QUASI_CLOSED, 1000L, dnOne.getUuid(), dnOne);
+ final ContainerReplica replicaTwo = getReplicas(
+ id, State.QUASI_CLOSED, 1000L, dnTwo.getUuid(), dnTwo);
+ final ContainerReplica replicaThree = getReplicas(
+ id, State.UNHEALTHY, 1001L, dnThree.getUuid(), dnThree);
+ Set<ContainerReplica> containerReplicas = new HashSet<>();
+ containerReplicas.add(replicaOne);
+ containerReplicas.add(replicaTwo);
+ containerReplicas.add(replicaThree);
+
+ ContainerCheckRequest request = new ContainerCheckRequest.Builder()
+ .setPendingOps(Collections.emptyList())
+ .setReport(new ReplicationManagerReport())
+ .setContainerInfo(containerInfo)
+ .setContainerReplicas(containerReplicas)
+ .build();
+ ContainerCheckRequest readRequest = new ContainerCheckRequest.Builder()
+ .setPendingOps(Collections.emptyList())
+ .setReport(new ReplicationManagerReport())
+ .setContainerInfo(containerInfo)
+ .setContainerReplicas(containerReplicas)
+ .setReadOnly(true)
+ .build();
+
+ assertFalse(quasiClosedContainerHandler.handle(request));
+ assertFalse(quasiClosedContainerHandler.handle(readRequest));
+ // verify close command was sent for replicas with sequence ID 1001, that
+ // is dnTwo and dnThree
Review Comment:
This comment seems incorrect.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]