You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ta...@apache.org on 2023/03/10 05:25:23 UTC

[iotdb] branch rel/1.1 updated: [To rel/1.1][IOTDB-5659] Fix dead lock condition in shutdown hook (#9275)

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

tanxinyu pushed a commit to branch rel/1.1
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/rel/1.1 by this push:
     new 25cc60068b [To rel/1.1][IOTDB-5659] Fix dead lock condition in shutdown hook (#9275)
25cc60068b is described below

commit 25cc60068b776e8c3fb035e5836b6ad671e9cb6a
Author: William Song <48...@users.noreply.github.com>
AuthorDate: Fri Mar 10 13:25:17 2023 +0800

    [To rel/1.1][IOTDB-5659] Fix dead lock condition in shutdown hook (#9275)
---
 .../main/java/org/apache/iotdb/commons/conf/CommonConfig.java  | 10 ++++++++++
 .../db/consensus/statemachine/DataRegionStateMachine.java      |  3 ++-
 .../java/org/apache/iotdb/db/service/IoTDBShutdownHook.java    |  1 +
 3 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/node-commons/src/main/java/org/apache/iotdb/commons/conf/CommonConfig.java b/node-commons/src/main/java/org/apache/iotdb/commons/conf/CommonConfig.java
index a30d2dc974..bc6e07c36b 100644
--- a/node-commons/src/main/java/org/apache/iotdb/commons/conf/CommonConfig.java
+++ b/node-commons/src/main/java/org/apache/iotdb/commons/conf/CommonConfig.java
@@ -116,6 +116,8 @@ public class CommonConfig {
   /** Status of current system. */
   private volatile NodeStatus status = NodeStatus.Running;
 
+  private volatile boolean isStopping = false;
+
   private volatile String statusReason = null;
 
   /** Disk Monitor */
@@ -360,4 +362,12 @@ public class CommonConfig {
   public void setTargetMLNodeEndPoint(TEndPoint targetMLNodeEndPoint) {
     this.targetMLNodeEndPoint = targetMLNodeEndPoint;
   }
+
+  public boolean isStopping() {
+    return isStopping;
+  }
+
+  public void setStopping(boolean stopping) {
+    isStopping = stopping;
+  }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/consensus/statemachine/DataRegionStateMachine.java b/server/src/main/java/org/apache/iotdb/db/consensus/statemachine/DataRegionStateMachine.java
index 0c3d25725c..8fb012081b 100644
--- a/server/src/main/java/org/apache/iotdb/db/consensus/statemachine/DataRegionStateMachine.java
+++ b/server/src/main/java/org/apache/iotdb/db/consensus/statemachine/DataRegionStateMachine.java
@@ -83,7 +83,8 @@ public class DataRegionStateMachine extends BaseStateMachine {
 
   @Override
   public boolean isReadOnly() {
-    return CommonDescriptor.getInstance().getConfig().isReadOnly();
+    return CommonDescriptor.getInstance().getConfig().isReadOnly()
+        && !CommonDescriptor.getInstance().getConfig().isStopping();
   }
 
   @Override
diff --git a/server/src/main/java/org/apache/iotdb/db/service/IoTDBShutdownHook.java b/server/src/main/java/org/apache/iotdb/db/service/IoTDBShutdownHook.java
index 17d4662e6c..ef94e579f9 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/IoTDBShutdownHook.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/IoTDBShutdownHook.java
@@ -54,6 +54,7 @@ public class IoTDBShutdownHook extends Thread {
     }
 
     // reject write operations to make sure all tsfiles will be sealed
+    CommonDescriptor.getInstance().getConfig().setStopping(true);
     CommonDescriptor.getInstance().getConfig().setNodeStatus(NodeStatus.ReadOnly);
     // wait all wal are flushed
     WALManager.getInstance().waitAllWALFlushed();