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

qiaojialin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new c6ce7922ee [IOTDB-4349] Remove error status in data node (#7250)
c6ce7922ee is described below

commit c6ce7922eed208e6f58c12c1d960eb6c58ef3c77
Author: Alan Choo <[email protected]>
AuthorDate: Wed Sep 7 10:22:33 2022 +0800

    [IOTDB-4349] Remove error status in data node (#7250)
---
 .../org/apache/iotdb/db/qp/sql/IdentifierParser.g4      |  1 -
 .../antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 |  2 +-
 .../main/antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4  |  4 ----
 .../confignode/manager/load/balancer/RouteBalancer.java |  5 +----
 docs/UserGuide/Maintenance-Tools/Maintenance-Command.md |  6 +++---
 .../UserGuide/Maintenance-Tools/Maintenance-Command.md  |  6 +++---
 .../org/apache/iotdb/commons/cluster/NodeStatus.java    |  8 +-------
 .../org/apache/iotdb/commons/conf/CommonConfig.java     | 10 +++++-----
 .../iotdb/commons/enums/HandleSystemErrorStrategy.java  | 17 +++++------------
 .../assembly/resources/conf/iotdb-datanode.properties   |  7 +++----
 .../apache/iotdb/db/engine/storagegroup/DataRegion.java |  2 +-
 .../iotdb/db/engine/storagegroup/TsFileProcessor.java   |  5 ++---
 .../apache/iotdb/db/metadata/logfile/MLogWriter.java    |  3 +--
 .../org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java |  2 --
 .../org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java     |  2 --
 .../java/org/apache/iotdb/db/wal/buffer/WALBuffer.java  |  7 +++----
 .../iotdb/db/wal/checkpoint/CheckpointManager.java      |  5 ++---
 17 files changed, 31 insertions(+), 61 deletions(-)

diff --git 
a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IdentifierParser.g4 
b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IdentifierParser.g4
index 6a649b840f..d0052decd8 100644
--- a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IdentifierParser.g4
+++ b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IdentifierParser.g4
@@ -130,7 +130,6 @@ keyWords
     | QUERY
     | RUNNING
     | READONLY
-    | ERROR
     | REGEXP
     | REGIONS
     | REMOVE
diff --git a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 
b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4
index 6a141ce128..28851aee49 100644
--- a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4
+++ b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4
@@ -649,7 +649,7 @@ explain
 
 // Set System To readonly/running/error
 setSystemStatus
-    : SET SYSTEM TO (READONLY|RUNNING|ERROR) (ON (LOCAL | CLUSTER))?
+    : SET SYSTEM TO (READONLY|RUNNING) (ON (LOCAL | CLUSTER))?
     ;
 
 // Show Version
diff --git a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4 
b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4
index 10bb58e1cc..b30831d671 100644
--- a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4
+++ b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4
@@ -435,10 +435,6 @@ READONLY
     : R E A D O N L Y
     ;
 
-ERROR
-    : E R R O R
-    ;
-
 REGEXP
     : R E G E X P
     ;
diff --git 
a/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/balancer/RouteBalancer.java
 
b/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/balancer/RouteBalancer.java
index 5dde65f600..4c951a8dc8 100644
--- 
a/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/balancer/RouteBalancer.java
+++ 
b/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/balancer/RouteBalancer.java
@@ -100,10 +100,7 @@ public class RouteBalancer {
           lazyGreedyRouter.updateDisabledDataNodes(
               getNodeManager()
                   .filterDataNodeThroughStatus(
-                      NodeStatus.Unknown,
-                      NodeStatus.Removing,
-                      NodeStatus.Error,
-                      NodeStatus.ReadOnly));
+                      NodeStatus.Unknown, NodeStatus.Removing, 
NodeStatus.ReadOnly));
           return lazyGreedyRouter;
         } else if (LEADER_POLICY.equals(policy)) {
           return new LeaderRouter(
diff --git a/docs/UserGuide/Maintenance-Tools/Maintenance-Command.md 
b/docs/UserGuide/Maintenance-Tools/Maintenance-Command.md
index 6c86cbcf6a..576be61509 100644
--- a/docs/UserGuide/Maintenance-Tools/Maintenance-Command.md
+++ b/docs/UserGuide/Maintenance-Tools/Maintenance-Command.md
@@ -67,14 +67,14 @@ IoTDB> CLEAR CACHE ON CLUSTER
 ```
 
 
-## SET SYSTEM TO READONLY / RUNNING / ERROR
+## SET SYSTEM TO READONLY / RUNNING
 
-Manually set IoTDB system to running, read-only, error mode. In cluster mode, 
we provide commands to set the local node status and set the cluster status, 
valid for the entire cluster by default.
+Manually set IoTDB system to running, read-only mode. In cluster mode, we 
provide commands to set the local node status and set the cluster status, valid 
for the entire cluster by default.
 
 ```sql
 IoTDB> SET SYSTEM TO RUNNING
 IoTDB> SET SYSTEM TO READONLY ON LOCAL
-IoTDB> SET SYSTEM TO ERROR ON CLUSTER
+IoTDB> SET SYSTEM TO READONLY ON CLUSTER
 ```
 
 
diff --git a/docs/zh/UserGuide/Maintenance-Tools/Maintenance-Command.md 
b/docs/zh/UserGuide/Maintenance-Tools/Maintenance-Command.md
index e6a30d03af..7b5f8dc4e1 100644
--- a/docs/zh/UserGuide/Maintenance-Tools/Maintenance-Command.md
+++ b/docs/zh/UserGuide/Maintenance-Tools/Maintenance-Command.md
@@ -67,14 +67,14 @@ IoTDB> CLEAR CACHE ON CLUSTER
 ```
 
 
-## SET SYSTEM TO READONLY / RUNNING / ERROR
+## SET SYSTEM TO READONLY / RUNNING
 
-手动设置系统为正常运行、只读、错误状态。在集群模式下,我们提供了设置本节点状态、设置整个集群状态的命令,默认对整个集群生效。
+手动设置系统为正常运行、只读状态。在集群模式下,我们提供了设置本节点状态、设置整个集群状态的命令,默认对整个集群生效。
 
 ```sql
 IoTDB> SET SYSTEM TO RUNNING
 IoTDB> SET SYSTEM TO READONLY ON LOCAL
-IoTDB> SET SYSTEM TO ERROR ON CLUSTER
+IoTDB> SET SYSTEM TO READONLY ON CLUSTER
 ```
 
 ## 超时
diff --git 
a/node-commons/src/main/java/org/apache/iotdb/commons/cluster/NodeStatus.java 
b/node-commons/src/main/java/org/apache/iotdb/commons/cluster/NodeStatus.java
index 182aebe79f..a75f25a123 100644
--- 
a/node-commons/src/main/java/org/apache/iotdb/commons/cluster/NodeStatus.java
+++ 
b/node-commons/src/main/java/org/apache/iotdb/commons/cluster/NodeStatus.java
@@ -30,13 +30,7 @@ public enum NodeStatus {
   Removing("Removing"),
 
   /** Only query statements are permitted */
-  ReadOnly("ReadOnly"),
-
-  /**
-   * Unrecoverable errors occur, system will be read-only or exit according to 
the param
-   * allow_read_only_when_errors_occur
-   */
-  Error("Error");
+  ReadOnly("ReadOnly");
 
   private final String status;
 
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 2ec5f03d47..3f0a9fd8ca 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
@@ -256,22 +256,22 @@ public class CommonConfig {
   }
 
   public boolean isReadOnly() {
-    return status == NodeStatus.ReadOnly
-        || (status == NodeStatus.Error
-            && handleSystemErrorStrategy == 
HandleSystemErrorStrategy.CHANGE_TO_READ_ONLY);
+    return status == NodeStatus.ReadOnly;
   }
 
   public NodeStatus getNodeStatus() {
     return status;
   }
 
+  public void handleUnrecoverableError() {
+    handleSystemErrorStrategy.handle();
+  }
+
   public void setNodeStatus(NodeStatus newStatus) {
     if (newStatus == NodeStatus.ReadOnly) {
       logger.error(
           "Change system status to read-only! Only query statements are 
permitted!",
           new RuntimeException("System mode is set to READ_ONLY"));
-    } else if (newStatus == NodeStatus.Error) {
-      newStatus = handleSystemErrorStrategy.handle();
     } else {
       logger.info("Set system mode from {} to {}.", status, newStatus);
     }
diff --git 
a/node-commons/src/main/java/org/apache/iotdb/commons/enums/HandleSystemErrorStrategy.java
 
b/node-commons/src/main/java/org/apache/iotdb/commons/enums/HandleSystemErrorStrategy.java
index af74edf982..c176826c06 100644
--- 
a/node-commons/src/main/java/org/apache/iotdb/commons/enums/HandleSystemErrorStrategy.java
+++ 
b/node-commons/src/main/java/org/apache/iotdb/commons/enums/HandleSystemErrorStrategy.java
@@ -19,13 +19,12 @@
 package org.apache.iotdb.commons.enums;
 
 import org.apache.iotdb.commons.cluster.NodeStatus;
+import org.apache.iotdb.commons.conf.CommonDescriptor;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public enum HandleSystemErrorStrategy {
-  /** just set system status to error and then do nothing else */
-  NONE,
   /** set system status to read-only and the system only accepts query 
operations */
   CHANGE_TO_READ_ONLY,
   /** the system will be shutdown */
@@ -33,23 +32,17 @@ public enum HandleSystemErrorStrategy {
 
   private static final Logger logger = 
LoggerFactory.getLogger(HandleSystemErrorStrategy.class);
 
-  public NodeStatus handle() {
-    NodeStatus status = NodeStatus.Error;
-    if (this == HandleSystemErrorStrategy.NONE) {
-      logger.error(
-          "Unrecoverable error occurs! Just change system status to error 
because handle_system_error is NONE.",
-          new RuntimeException("System mode is set to ERROR"));
-    } else if (this == HandleSystemErrorStrategy.CHANGE_TO_READ_ONLY) {
+  public void handle() {
+    if (this == HandleSystemErrorStrategy.CHANGE_TO_READ_ONLY) {
       logger.error(
           "Unrecoverable error occurs! Change system status to read-only 
because handle_system_error is CHANGE_TO_READ_ONLY. Only query statements are 
permitted!",
           new RuntimeException("System mode is set to READ_ONLY"));
-      status = NodeStatus.ReadOnly;
+      
CommonDescriptor.getInstance().getConfig().setNodeStatus(NodeStatus.ReadOnly);
     } else if (this == HandleSystemErrorStrategy.SHUTDOWN) {
       logger.error(
           "Unrecoverable error occurs! Shutdown system directly because 
handle_system_error is SHUTDOWN.",
-          new RuntimeException("System mode is set to ERROR"));
+          new RuntimeException("Unrecoverable error occurs! Shutdown system 
directly."));
       System.exit(-1);
     }
-    return status;
   }
 }
diff --git a/server/src/assembly/resources/conf/iotdb-datanode.properties 
b/server/src/assembly/resources/conf/iotdb-datanode.properties
index 9322914906..a094e38433 100644
--- a/server/src/assembly/resources/conf/iotdb-datanode.properties
+++ b/server/src/assembly/resources/conf/iotdb-datanode.properties
@@ -318,10 +318,9 @@ timestamp_precision=ms
 
 # What will the system do when unrecoverable error occurs.
 # Datatype: String
-# Three strategies are as follows:
-# 1. NONE: just set system status to error and then do nothing else.
-# 2. CHANGE_TO_READ_ONLY: set system status to read-only and the system only 
accepts query operations.
-# 3. SHUTDOWN: the system will be shutdown.
+# Optional strategies are as follows:
+# 1. CHANGE_TO_READ_ONLY: set system status to read-only and the system only 
accepts query operations.
+# 2. SHUTDOWN: the system will be shutdown.
 # handle_system_error=CHANGE_TO_READ_ONLY
 
 # Size of log buffer in each metadata operation plan(in byte).
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegion.java 
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegion.java
index 7f959fb3fa..18093dec11 100755
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegion.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegion.java
@@ -1490,7 +1490,7 @@ public class DataRegion {
         } else {
           logger.error(
               "meet IOException when creating TsFileProcessor, change system 
mode to error", e);
-          
CommonDescriptor.getInstance().getConfig().setNodeStatus(NodeStatus.Error);
+          
CommonDescriptor.getInstance().getConfig().handleUnrecoverableError();
           break;
         }
       }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java
index 605cc979db..44943733e6 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java
@@ -19,7 +19,6 @@
 package org.apache.iotdb.db.engine.storagegroup;
 
 import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.cluster.NodeStatus;
 import org.apache.iotdb.commons.conf.CommonDescriptor;
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.exception.MetadataException;
@@ -1246,7 +1245,7 @@ public class TsFileProcessor {
               storageGroupName,
               tsFileResource.getTsFile().getName(),
               e);
-          
CommonDescriptor.getInstance().getConfig().setNodeStatus(NodeStatus.Error);
+          
CommonDescriptor.getInstance().getConfig().handleUnrecoverableError();
           try {
             logger.error(
                 "{}: {} IOTask meets error, truncate the corrupted data",
@@ -1376,7 +1375,7 @@ public class TsFileProcessor {
               storageGroupName,
               tsFileResource.getTsFile().getAbsolutePath(),
               e);
-          
CommonDescriptor.getInstance().getConfig().setNodeStatus(NodeStatus.Error);
+          
CommonDescriptor.getInstance().getConfig().handleUnrecoverableError();
           break;
         }
       }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/logfile/MLogWriter.java 
b/server/src/main/java/org/apache/iotdb/db/metadata/logfile/MLogWriter.java
index b2f1a41d9c..b335a338d4 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/logfile/MLogWriter.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/logfile/MLogWriter.java
@@ -18,7 +18,6 @@
  */
 package org.apache.iotdb.db.metadata.logfile;
 
-import org.apache.iotdb.commons.cluster.NodeStatus;
 import org.apache.iotdb.commons.conf.CommonDescriptor;
 import org.apache.iotdb.commons.file.SystemFileFactory;
 import org.apache.iotdb.commons.path.PartialPath;
@@ -125,7 +124,7 @@ public class MLogWriter implements AutoCloseable {
         } else {
           logger.error(
               "MLog {} sync failed, change system mode to error", 
logFile.getAbsoluteFile(), e);
-          
CommonDescriptor.getInstance().getConfig().setNodeStatus(NodeStatus.Error);
+          
CommonDescriptor.getInstance().getConfig().handleUnrecoverableError();
           break;
         }
       }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java
index 143c6d315d..6420fc7999 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java
@@ -2486,8 +2486,6 @@ public class ASTVisitor extends 
IoTDBSqlParserBaseVisitor<Statement> {
       setSystemStatusStatement.setStatus(NodeStatus.Running);
     } else if (ctx.READONLY() != null) {
       setSystemStatusStatement.setStatus(NodeStatus.ReadOnly);
-    } else if (ctx.ERROR() != null) {
-      setSystemStatusStatement.setStatus(NodeStatus.Error);
     } else {
       throw new RuntimeException("Unknown system status in set system 
command.");
     }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java 
b/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
index ad1797e026..0551aec282 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
@@ -2246,8 +2246,6 @@ public class IoTDBSqlVisitor extends 
IoTDBSqlParserBaseVisitor<Operator> {
       return new SetSystemModeOperator(SQLConstant.TOK_SET_SYSTEM_MODE, 
NodeStatus.Running);
     } else if (ctx.READONLY() != null) {
       return new SetSystemModeOperator(SQLConstant.TOK_SET_SYSTEM_MODE, 
NodeStatus.ReadOnly);
-    } else if (ctx.ERROR() != null) {
-      return new SetSystemModeOperator(SQLConstant.TOK_SET_SYSTEM_MODE, 
NodeStatus.Error);
     } else {
       throw new RuntimeException("Unknown system status in set system 
command.");
     }
diff --git a/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALBuffer.java 
b/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALBuffer.java
index 7e3b811148..43eab11225 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALBuffer.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALBuffer.java
@@ -18,7 +18,6 @@
  */
 package org.apache.iotdb.db.wal.buffer;
 
-import org.apache.iotdb.commons.cluster.NodeStatus;
 import org.apache.iotdb.commons.concurrent.IoTDBThreadPoolFactory;
 import org.apache.iotdb.commons.concurrent.ThreadName;
 import org.apache.iotdb.commons.conf.CommonDescriptor;
@@ -426,7 +425,7 @@ public class WALBuffer extends AbstractWALBuffer {
       } catch (Throwable e) {
         logger.error(
             "Fail to sync wal node-{}'s buffer, change system mode to error.", 
identifier, e);
-        
CommonDescriptor.getInstance().getConfig().setNodeStatus(NodeStatus.Error);
+        CommonDescriptor.getInstance().getConfig().handleUnrecoverableError();
       } finally {
         switchSyncingBufferToIdle();
       }
@@ -447,7 +446,7 @@ public class WALBuffer extends AbstractWALBuffer {
           if (info.rollWALFileWriterListener != null) {
             info.rollWALFileWriterListener.fail(e);
           }
-          
CommonDescriptor.getInstance().getConfig().setNodeStatus(NodeStatus.Error);
+          
CommonDescriptor.getInstance().getConfig().handleUnrecoverableError();
         }
       } else if (forceFlag) { // force os cache to the storage device, avoid 
force twice by judging
         // after rolling file
@@ -462,7 +461,7 @@ public class WALBuffer extends AbstractWALBuffer {
           for (WALFlushListener fsyncListener : info.fsyncListeners) {
             fsyncListener.fail(e);
           }
-          
CommonDescriptor.getInstance().getConfig().setNodeStatus(NodeStatus.Error);
+          
CommonDescriptor.getInstance().getConfig().handleUnrecoverableError();
         }
       }
 
diff --git 
a/server/src/main/java/org/apache/iotdb/db/wal/checkpoint/CheckpointManager.java
 
b/server/src/main/java/org/apache/iotdb/db/wal/checkpoint/CheckpointManager.java
index 23eac301b1..020576f9c4 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/wal/checkpoint/CheckpointManager.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/wal/checkpoint/CheckpointManager.java
@@ -18,7 +18,6 @@
  */
 package org.apache.iotdb.db.wal.checkpoint;
 
-import org.apache.iotdb.commons.cluster.NodeStatus;
 import org.apache.iotdb.commons.conf.CommonDescriptor;
 import org.apache.iotdb.commons.file.SystemFileFactory;
 import org.apache.iotdb.db.conf.IoTDBConfig;
@@ -175,7 +174,7 @@ public class CheckpointManager implements AutoCloseable {
             "Fail to fsync wal node-{}'s checkpoint writer, change system mode 
to error.",
             identifier,
             e);
-        
CommonDescriptor.getInstance().getConfig().setNodeStatus(NodeStatus.Error);
+        CommonDescriptor.getInstance().getConfig().handleUnrecoverableError();
       }
 
       try {
@@ -194,7 +193,7 @@ public class CheckpointManager implements AutoCloseable {
             "Fail to roll wal node-{}'s checkpoint writer, change system mode 
to error.",
             identifier,
             e);
-        
CommonDescriptor.getInstance().getConfig().setNodeStatus(NodeStatus.Error);
+        CommonDescriptor.getInstance().getConfig().handleUnrecoverableError();
       }
     } finally {
       infoLock.unlock();

Reply via email to