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

adoroszlai 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 583730dc6df HDDS-12843. Intermittent NPE in 
TestDecommissionAndMaintenance (#8643)
583730dc6df is described below

commit 583730dc6dfb6a32a980afa7537c93fa585dda30
Author: Chung En Lee <[email protected]>
AuthorDate: Sat Jul 12 15:44:11 2025 +0800

    HDDS-12843. Intermittent NPE in TestDecommissionAndMaintenance (#8643)
---
 .../SetNodeOperationalStateCommandHandler.java           | 16 ++++++++++++----
 .../hdds/scm/safemode/ECContainerSafeModeRule.java       |  1 -
 2 files changed, 12 insertions(+), 5 deletions(-)

diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/SetNodeOperationalStateCommandHandler.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/SetNodeOperationalStateCommandHandler.java
index 25a158bb45d..4872efbd4b2 100644
--- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/SetNodeOperationalStateCommandHandler.java
+++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/SetNodeOperationalStateCommandHandler.java
@@ -92,11 +92,8 @@ public void handle(SCMCommand<?> command, OzoneContainer 
container,
     DatanodeDetails dni = context.getParent().getDatanodeDetails();
     HddsProtos.NodeOperationalState state =
         setNodeCmdProto.getNodeOperationalState();
-    dni.setPersistedOpState(state);
-    dni.setPersistedOpStateExpiryEpochSec(
-        setNodeCmd.getStateExpiryEpochSeconds());
     try {
-      persistDatanodeDetails(dni);
+      persistUpdatedDatanodeDetails(dni, state, 
setNodeCmd.getStateExpiryEpochSeconds());
     } catch (IOException ioe) {
       LOG.error("Failed to persist the datanode state", ioe);
       // TODO - this should probably be raised, but it will break the command
@@ -106,6 +103,17 @@ public void handle(SCMCommand<?> command, OzoneContainer 
container,
     this.opsLatencyMs.add(Time.monotonicNow() - startTime);
   }
 
+  private void persistUpdatedDatanodeDetails(
+      DatanodeDetails dnDetails, HddsProtos.NodeOperationalState state, long 
stateExpiryEpochSeconds)
+      throws IOException {
+    DatanodeDetails persistedDni = new DatanodeDetails(dnDetails);
+    persistedDni.setPersistedOpState(state);
+    persistedDni.setPersistedOpStateExpiryEpochSec(stateExpiryEpochSeconds);
+    persistDatanodeDetails(persistedDni);
+    dnDetails.setPersistedOpState(state);
+    dnDetails.setPersistedOpStateExpiryEpochSec(stateExpiryEpochSeconds);
+  }
+
   // TODO - this duplicates code in HddsDatanodeService and InitDatanodeState
   //        Need to refactor.
   private void persistDatanodeDetails(DatanodeDetails dnDetails)
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/safemode/ECContainerSafeModeRule.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/safemode/ECContainerSafeModeRule.java
index a6c30aace93..3ed27d8da8d 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/safemode/ECContainerSafeModeRule.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/safemode/ECContainerSafeModeRule.java
@@ -194,7 +194,6 @@ private void recordReportedContainer(long containerID) {
 
   private void initializeRule() {
     ecContainers.clear();
-    ecContainerDNsMap.clear();
     containerManager.getContainers(ReplicationType.EC).stream()
         .filter(this::isClosed).filter(c -> c.getNumberOfKeys() > 0)
         .map(ContainerInfo::getContainerID).forEach(ecContainers::add);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to