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]