smengcl commented on code in PR #7976:
URL: https://github.com/apache/ozone/pull/7976#discussion_r1976062034


##########
hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/AbstractContainerReportHandler.java:
##########
@@ -352,26 +352,32 @@ private boolean updateContainerState(final 
DatanodeDetails datanode,
        */
       break;
     case DELETING:
+    case DELETED:
       /*
-      HDDS-11136: If a DELETING container has a non-empty CLOSED replica, the 
container should be moved back to CLOSED
-      state.
+       * HDDS-11136: If a DELETING container has a non-empty CLOSED replica, 
the container should be moved back to
+       * CLOSED state.
+       *
+       * HDDS-12421: If a DELETING or DELETED container has a non-empty 
replica, the container should also be moved
+       * back to CLOSED state.
        */
-      boolean replicaStateAllowed = replica.getState() == State.CLOSED;
-      boolean replicaNotEmpty = replica.hasIsEmpty() && !replica.getIsEmpty();
-      if (replicaStateAllowed && replicaNotEmpty) {
-        logger.info("Moving DELETING container {} to CLOSED state, datanode {} 
reported replica with state={}, " +
-            "isEmpty={} and keyCount={}.", containerId, 
datanode.getHostName(), replica.getState(), false,
-            replica.getKeyCount());
-        containerManager.transitionDeletingToClosedState(containerId);
+      boolean replicaIsEmpty = replica.hasIsEmpty() && replica.getIsEmpty();
+      // If container is in DELETED state and the reported replica is empty, 
delete the empty replica.
+      // We should also do this for DELETING containers and currently 
DeletingContainerHandler does that
+      if (container.getState() == HddsProtos.LifeCycleState.DELETED && 
replicaIsEmpty) {
+        // should we send a non-force delete instead?

Review Comment:
   Good catch @siddhantsangwan @errose28 . Done.
   
   > All methods would be of the form sendDeleteCommand or 
sendForceDeleteCommand. DeleteContainerCommand could have two static factory 
methods to build force and non-force variants with private constructors. This 
would make it clearer when reading the code which paths are doing the 
"dangerous" force delete operation.
   
   Good idea. But I won't do the refactoring here. This will be in another PR.



-- 
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]

Reply via email to