nandakumar131 commented on code in PR #7985:
URL: https://github.com/apache/ozone/pull/7985#discussion_r1976470035
##########
hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/health/MismatchedReplicasHandler.java:
##########
@@ -57,35 +58,28 @@ public MismatchedReplicasHandler(
*/
@Override
public boolean handle(ContainerCheckRequest request) {
- ContainerInfo containerInfo = request.getContainerInfo();
- Set<ContainerReplica> replicas = request.getContainerReplicas();
+ if (request.isReadOnly()) {
+ return false;
+ }
+
+ final ContainerInfo containerInfo = request.getContainerInfo();
+ final Set<ContainerReplica> replicas = request.getContainerReplicas();
+
if (containerInfo.getState() != HddsProtos.LifeCycleState.CLOSED &&
containerInfo.getState() != HddsProtos.LifeCycleState.QUASI_CLOSED) {
// Handler is only relevant for CLOSED or QUASI-CLOSED containers.
return false;
}
- LOG.debug("Checking container {} in MismatchedReplicasHandler",
- containerInfo);
- if (request.isReadOnly()) {
- return false;
- }
- // close replica if needed
- for (ContainerReplica replica : replicas) {
- if (shouldBeClosed(containerInfo, replica)) {
- LOG.debug("Sending close command for mismatched replica {} of " +
- "container {}.", replica, containerInfo);
+ LOG.debug("Checking container {} in MismatchedReplicasHandler",
containerInfo);
- if (containerInfo.getState() == HddsProtos.LifeCycleState.CLOSED) {
- replicationManager.sendCloseContainerReplicaCommand(
- containerInfo, replica.getDatanodeDetails(), true);
- } else if (containerInfo.getState() ==
- HddsProtos.LifeCycleState.QUASI_CLOSED) {
- replicationManager.sendCloseContainerReplicaCommand(
- containerInfo, replica.getDatanodeDetails(), false);
- }
- }
- }
+ final Predicate<ContainerReplica> shouldSendClose = (r) ->
shouldSendClose(containerInfo, r);
+
+ replicas.stream().filter(shouldSendClose).forEach(r -> {
+ LOG.debug("Sending close command for mismatched replica {} of container
{}.", r, containerInfo);
+ replicationManager.sendCloseContainerReplicaCommand(
+ containerInfo, r.getDatanodeDetails(),
shouldForceClose(containerInfo, r));
Review Comment:
The same handler is used for EC Containers as well and for EC Containers the
Datanode [expects force flag to be
set](https://github.com/apache/ozone/blob/39437eae0cbc4de6078ca16f80d5c579d5a93fbf/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/CloseContainerCommandHandler.java#L128)
for Replicas in OPEN/CLOSING state.
We should add logic based on Container type.
If everyone feels strongly about this, I can change the behaviour for Ratis
Containers.
--
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]