From d407ebf101437b864b4b2e9ddc9bd2daf74525a8 Mon Sep 17 00:00:00 2001 From: markgui Date: Thu, 29 Jul 2021 21:00:32 +0800 Subject: [PATCH] HDDS-5513. Race condition upon dn restart at prefinalization. --- .../common/statemachine/DatanodeStateMachine.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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.