diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java index 56ab9a63ba71..488c7bc03655 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java @@ -88,7 +88,7 @@ public class DatanodeStateMachine implements Closeable { private final ReportManager reportManager; private long commandsHandled; private final AtomicLong nextHB; - private Thread stateMachineThread = null; + private volatile Thread stateMachineThread = null; private Thread cmdProcessThread = null; private final ReplicationSupervisor supervisor; @@ -476,7 +476,7 @@ public void startDaemon() { * be sent by datanode. */ public void triggerHeartbeat() { - if (stateMachineThread != null) { + if (stateMachineThread != null && isDaemonStarted()) { stateMachineThread.interrupt(); } } @@ -517,6 +517,10 @@ public synchronized void stopDaemon() { } } + public boolean isDaemonStarted() { + return this.getContext().getExecutionCount() > 0; + } + /** * * Check if the datanode state machine daemon is stopped.