This is an automated email from the ASF dual-hosted git repository.
sumitagrawl 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 fb2cc733688 HDDS-16169. Add old updateContainerState to handle upgrade
path. (#11012)
fb2cc733688 is described below
commit fb2cc733688cff8e73ca78f120dc65dc969f13b1
Author: Ashish Kumar <[email protected]>
AuthorDate: Fri Aug 14 11:10:34 2026 +0530
HDDS-16169. Add old updateContainerState to handle upgrade path. (#11012)
---
.../hdds/scm/container/ContainerStateManager.java | 6 +++++
.../scm/container/ContainerStateManagerImpl.java | 30 ++++++++++++++++++++++
.../ha/invoker/ContainerStateManagerInvoker.java | 25 +++++++++++++++---
3 files changed, 58 insertions(+), 3 deletions(-)
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 913e1ce84a4..c80996226b5 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
@@ -30,6 +30,7 @@
import org.apache.hadoop.hdds.scm.metadata.Replicate;
import org.apache.hadoop.hdds.scm.pipeline.PipelineID;
import org.apache.hadoop.hdds.utils.db.Table;
+import
org.apache.hadoop.ozone.common.statemachine.InvalidStateTransitionException;
/**
* A ContainerStateManager is responsible for keeping track of all the
@@ -169,6 +170,11 @@ List<ContainerID> getContainerIDs(LifeCycleState state,
ContainerHealthState hea
void addContainer(ContainerInfoProto containerInfo)
throws IOException;
+ @Deprecated
+ @Replicate
+ void updateContainerState(HddsProtos.ContainerID id,
+ HddsProtos.LifeCycleEvent event) throws IOException,
InvalidStateTransitionException;
+
/**
* 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 65060c0a171..213f7256d61 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
@@ -386,6 +386,36 @@ public boolean contains(ContainerID id) {
}
}
+ @Deprecated
+ @Override
+ public void updateContainerState(final HddsProtos.ContainerID containerID,
+ final LifeCycleEvent event)
+ throws IOException, InvalidStateTransitionException {
+ // 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);
+ }
+ }
+ }
+ }
+
@Override
public void updateContainerStateWithSequenceId(final HddsProtos.ContainerID
containerID,
final LifeCycleEvent event,
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/invoker/ContainerStateManagerInvoker.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/invoker/ContainerStateManagerInvoker.java
index d5c7be1c8fe..311a5defb71 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/invoker/ContainerStateManagerInvoker.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/invoker/ContainerStateManagerInvoker.java
@@ -35,6 +35,7 @@
import org.apache.hadoop.hdds.scm.ha.SCMRatisServer;
import org.apache.hadoop.hdds.scm.pipeline.PipelineID;
import org.apache.hadoop.hdds.utils.db.Table;
+import
org.apache.hadoop.ozone.common.statemachine.InvalidStateTransitionException;
import org.apache.ratis.protocol.Message;
/** Code generated for {@link ContainerStateManager}. Do not modify. */
@@ -57,6 +58,11 @@ enum ReplicateMethod implements NameAndParameterTypes {
null,
new Class<?>[] {ContainerInfoProto.class}
}),
+ updateContainerState(new Class<?>[][] {
+ null,
+ null,
+ new Class<?>[] {HddsProtos.ContainerID.class, LifeCycleEvent.class}
+ }),
updateContainerStateWithSequenceId(new Class<?>[][] {
null,
null,
@@ -179,6 +185,13 @@ public void updateContainerReplica(ContainerReplica arg0) {
invoker.getImpl().updateContainerReplica(arg0);
}
+ @Override
+ public void updateContainerState(HddsProtos.ContainerID arg0,
LifeCycleEvent arg1) throws IOException,
+ InvalidStateTransitionException {
+ final Object[] args = {arg0, arg1};
+ invoker.invokeReplicateDirect(ReplicateMethod.updateContainerState,
args);
+ }
+
@Override
public void updateContainerStateWithSequenceId(HddsProtos.ContainerID
arg0, LifeCycleEvent arg1, Long arg2) throws
IOException {
@@ -303,11 +316,17 @@ public Message invokeLocal(String methodName, Object[] p)
throws Exception {
getImpl().updateContainerReplica(arg26);
return Message.EMPTY;
- case "updateContainerStateWithSequenceId":
+ case "updateContainerState":
final HddsProtos.ContainerID arg27 = p.length > 0 ?
(HddsProtos.ContainerID) p[0] : null;
final LifeCycleEvent arg28 = p.length > 1 ? (LifeCycleEvent) p[1] : null;
- final Long arg29 = p.length > 2 ? (Long) p[2] : null;
- getImpl().updateContainerStateWithSequenceId(arg27, arg28, arg29);
+ getImpl().updateContainerState(arg27, arg28);
+ return Message.EMPTY;
+
+ case "updateContainerStateWithSequenceId":
+ final HddsProtos.ContainerID arg29 = p.length > 0 ?
(HddsProtos.ContainerID) p[0] : null;
+ final LifeCycleEvent arg30 = p.length > 1 ? (LifeCycleEvent) p[1] : null;
+ final Long arg31 = p.length > 2 ? (Long) p[2] : null;
+ getImpl().updateContainerStateWithSequenceId(arg29, arg30, arg31);
return Message.EMPTY;
default:
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]