You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ozone.apache.org by si...@apache.org on 2026/10/21 03:16:14 UTC

(ozone) 02/02: HDDS-16169. Add old updateContainerState to handle upgrade path. (#11012)

This is an automated email from the ASF dual-hosted git repository.

smengcl pushed a commit to branch ozone-2.1
in repository https://gitbox.apache.org/repos/asf/ozone.git

commit 914737067d4b4153f779cca0fb931b881308450e
Author: Ashish Kumar <11...@users.noreply.github.com>
AuthorDate: Fri Aug 14 11:10:34 2026 +0530

    HDDS-16169. Add old updateContainerState to handle upgrade path. (#11012)
    
    (cherry picked from commit fb2cc733688cff8e73ca78f120dc65dc969f13b1)
    
    Conflicts:
            hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ContainerStateManager.java
            hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ContainerStateManagerImpl.java
            hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/invoker/ContainerStateManagerInvoker.java
    
    ozone-2.1 dispatches replicated calls by reflection and has no
    ContainerStateManagerInvoker, so that part does not apply. The restored
    updateContainerState is the ozone-2.1 version, which already catches
    InvalidStateTransitionException (HDDS-15578).
---
 .../hdds/scm/container/ContainerStateManager.java  |  6 ++++
 .../scm/container/ContainerStateManagerImpl.java   | 33 ++++++++++++++++++++++
 2 files changed, 39 insertions(+)

diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ContainerStateManager.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ContainerStateManager.java
index d212d1d400c..2e85544d95c 100644
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ContainerStateManager.java
+++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ContainerStateManager.java
@@ -158,6 +158,12 @@ public interface ContainerStateManager {
   void addContainer(ContainerInfoProto containerInfo)
       throws IOException;
 
+  @Deprecated
+  @Replicate
+  void updateContainerState(HddsProtos.ContainerID id,
+                            HddsProtos.LifeCycleEvent event)
+      throws IOException;
+
   /**
    * Updates container state with sequenceId synchronization for HA consistency.
    * This method ensures that all SCM nodes have the same sequenceId when
diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ContainerStateManagerImpl.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ContainerStateManagerImpl.java
index 68516f36c99..ff45f47ba1e 100644
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ContainerStateManagerImpl.java
+++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ContainerStateManagerImpl.java
@@ -352,6 +352,39 @@ public boolean contains(ContainerID id) {
     }
   }
 
+  @Deprecated
+  @Override
+  public void updateContainerState(final HddsProtos.ContainerID containerID,
+                                   final LifeCycleEvent event)
+      throws IOException {
+    // TODO: Remove the protobuf conversion after fixing ContainerStateMap.
+    final ContainerID id = ContainerID.getFromProtobuf(containerID);
+
+    try (AutoCloseableLock ignored = writeLock(id)) {
+      if (containers.contains(id)) {
+        final ContainerInfo oldInfo = containers.getContainerInfo(id);
+        final LifeCycleState oldState = oldInfo.getState();
+        final LifeCycleState newState = stateMachine.getNextState(
+            oldInfo.getState(), event);
+        if (newState.getNumber() > oldState.getNumber()) {
+          ExecutionUtil.create(() -> {
+            containers.updateState(id, oldState, newState);
+            transactionBuffer.addToBuffer(containerStore, id,
+                containers.getContainerInfo(id));
+          }).onException(() -> {
+            transactionBuffer.addToBuffer(containerStore, id, oldInfo);
+            containers.updateState(id, newState, oldState);
+          }).execute();
+          containerStateChangeActions.getOrDefault(event, info -> { })
+              .accept(oldInfo);
+        }
+      }
+    } catch (InvalidStateTransitionException e) {
+      LOG.warn("Failed to updateContainerState for container {}, ignoring it.",
+          id, e);
+    }
+  }
+
   @Override
   public void updateContainerStateWithSequenceId(final HddsProtos.ContainerID containerID,
                                                   final LifeCycleEvent event,


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@ozone.apache.org
For additional commands, e-mail: commits-help@ozone.apache.org