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

wangchao316 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 3deadae  [IOTDB-2752] reconstructing the start and stop command (#5261)
3deadae is described below

commit 3deadae57f71d434c3ea7974270dd45f17c7db07
Author: wangchao316 <[email protected]>
AuthorDate: Thu Mar 17 13:55:22 2022 +0800

    [IOTDB-2752] reconstructing the start and stop command (#5261)
    
    [IOTDB-2752] reconstructing the start and stop command (#5261)
---
 .../org/apache/iotdb/cluster/ClusterIoTDB.java     |  51 +--------
 .../cluster/ClusterIoTDBServerCommandLine.java     |  94 +++++++++++++++
 .../cluster/client/async/AsyncDataClient.java      |   2 +-
 .../cluster/client/async/AsyncMetaClient.java      |   2 +-
 .../iotdb/cluster/client/sync/SyncDataClient.java  |   2 +-
 .../iotdb/cluster/client/sync/SyncMetaClient.java  |   2 +-
 .../iotdb/cluster/config/ClusterConstant.java      |   2 +-
 .../iotdb/cluster/coordinator/Coordinator.java     |   2 +-
 .../apache/iotdb/cluster/log/LogDispatcher.java    |   2 +-
 .../iotdb/cluster/log/applier/BaseApplier.java     |   2 +-
 .../iotdb/cluster/log/catchup/CatchUpTask.java     |   2 +-
 .../iotdb/cluster/log/catchup/LogCatchUpTask.java  |   2 +-
 .../cluster/log/manage/CommittedEntryManager.java  |   2 +-
 .../iotdb/cluster/log/manage/RaftLogManager.java   |   2 +-
 .../log/manage/UnCommittedEntryManager.java        |   2 +-
 .../serializable/SyncLogDequeSerializer.java       |   2 +-
 .../iotdb/cluster/query/ClusterPlanExecutor.java   |   2 +-
 .../iotdb/cluster/query/ClusterPlanRouter.java     |   2 +-
 .../cluster/query/reader/ClusterTimeGenerator.java |   2 +-
 .../cluster/server/member/DataGroupMember.java     |   2 +-
 .../cluster/server/member/MetaGroupMember.java     |   2 +-
 .../iotdb/cluster/server/member/RaftMember.java    |   2 +-
 .../cluster/server/monitor/NodeStatusManager.java  |   2 +-
 .../cluster/server/service/DataGroupEngine.java    |   2 +-
 confignode/pom.xml                                 |   6 -
 .../assembly/resources/sbin/start-confignode.bat   |   3 +-
 .../assembly/resources/sbin/start-confignode.sh    |   2 +-
 .../iotdb/confignode/conf/ConfigNodeConfCheck.java |   8 +-
 .../iotdb/confignode/manager/ConfigManager.java    |   2 +-
 .../iotdb/confignode/service/ConfigNode.java       |  33 ++----
 .../confignode/service/ConfigNodeCommandLine.java  |  80 +++++++++++++
 .../utils/ConfigNodeEnvironmentUtils.java          |   2 +-
 iotdb-commons/pom.xml                              | 127 +++++++++++++++++++++
 .../apache/iotdb/commons/ServerCommandLine.java    |  67 +++++++++++
 .../org/apache/iotdb/commons}/utils/TestOnly.java  |   2 +-
 .../org/apache/iotdb/db/engine/StorageEngine.java  |   2 +-
 .../iotdb/db/engine/cache/BloomFilterCache.java    |   2 +-
 .../apache/iotdb/db/engine/cache/ChunkCache.java   |   2 +-
 .../db/engine/cache/TimeSeriesMetadataCache.java   |   2 +-
 .../engine/compaction/CompactionTaskManager.java   |   2 +-
 .../iotdb/db/engine/cq/ContinuousQueryService.java |   2 +-
 .../db/engine/storagegroup/StorageGroupInfo.java   |   2 +-
 .../db/engine/storagegroup/TsFileProcessor.java    |   2 +-
 .../db/engine/storagegroup/TsFileResource.java     |   2 +-
 .../db/engine/storagegroup/TsFileResourceList.java |   2 +-
 .../storagegroup/VirtualStorageGroupProcessor.java |   2 +-
 .../engine/trigger/executor/TriggerExecutor.java   |   2 +-
 .../service/TriggerRegistrationService.java        |   2 +-
 .../org/apache/iotdb/db/metadata/MManager.java     |   2 +-
 .../idtable/AppendOnlyDiskSchemaManager.java       |   2 +-
 .../apache/iotdb/db/metadata/idtable/IDTable.java  |   2 +-
 .../db/metadata/idtable/IDTableHashmapImpl.java    |   2 +-
 .../db/metadata/idtable/IDiskSchemaManager.java    |   2 +-
 .../db/metadata/idtable/entry/DeviceEntry.java     |   2 +-
 .../db/metadata/idtable/entry/DeviceIDFactory.java |   2 +-
 .../db/metadata/idtable/entry/SchemaEntry.java     |   2 +-
 .../apache/iotdb/db/metadata/path/AlignedPath.java |   2 +-
 .../iotdb/db/metadata/path/MeasurementPath.java    |   2 +-
 .../apache/iotdb/db/metadata/path/PartialPath.java |   2 +-
 .../storagegroup/StorageGroupSchemaManager.java    |   2 +-
 .../db/metadata/template/TemplateManager.java      |   2 +-
 .../apache/iotdb/db/metadata/utils/MetaUtils.java  |   2 +-
 .../apache/iotdb/db/mpp/plan/node/PlanNodeId.java  |  34 +++---
 .../iotdb/db/qp/physical/crud/InsertRowPlan.java   |   2 +-
 .../db/qp/physical/sys/CreateTemplatePlan.java     |   2 +-
 .../iotdb/db/qp/strategy/LogicalGenerator.java     |   2 +-
 .../apache/iotdb/db/qp/utils/DatetimeUtils.java    |   2 +-
 .../query/dataset/groupby/GroupByTimeDataSet.java  |   2 +-
 .../groupby/GroupByWithValueFilterDataSet.java     |   2 +-
 .../query/reader/series/AlignedSeriesReader.java   |   2 +-
 .../query/reader/series/SeriesAggregateReader.java |   2 +-
 .../reader/series/SeriesRawDataBatchReader.java    |   2 +-
 .../iotdb/db/query/reader/series/SeriesReader.java |   2 +-
 .../reader/series/SeriesReaderByTimestamp.java     |   2 +-
 .../query/udf/service/UDFRegistrationService.java  |   2 +-
 .../iotdb/db/rescon/TsFileResourceManager.java     |   2 +-
 .../apache/iotdb/db/service/RegisterManager.java   |   2 +-
 .../org/apache/iotdb/db/utils/CommonUtils.java     |   1 +
 .../db/utils/datastructure/AlignedTVList.java      |   2 +-
 .../iotdb/db/utils/datastructure/TVList.java       |   2 +-
 .../utils/windowing/window/EvictableBatchList.java |   2 +-
 .../org/apache/iotdb/db/writelog/io/LogWriter.java |   2 +-
 thrift-confignode/pom.xml                          |   2 +-
 83 files changed, 478 insertions(+), 170 deletions(-)

diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/ClusterIoTDB.java 
b/cluster/src/main/java/org/apache/iotdb/cluster/ClusterIoTDB.java
index b15635b..8c02355 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/ClusterIoTDB.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/ClusterIoTDB.java
@@ -56,6 +56,7 @@ import 
org.apache.iotdb.cluster.server.service.MetaAsyncService;
 import org.apache.iotdb.cluster.server.service.MetaSyncService;
 import org.apache.iotdb.cluster.utils.ClusterUtils;
 import org.apache.iotdb.cluster.utils.nodetool.ClusterMonitor;
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.concurrent.IoTDBThreadPoolFactory;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBConfigCheck;
@@ -69,7 +70,6 @@ import org.apache.iotdb.db.service.JMXService;
 import org.apache.iotdb.db.service.RegisterManager;
 import org.apache.iotdb.db.service.basic.ServiceProvider;
 import org.apache.iotdb.db.service.thrift.ThriftServiceThread;
-import org.apache.iotdb.db.utils.TestOnly;
 
 import org.apache.thrift.TException;
 import org.apache.thrift.async.TAsyncClientManager;
@@ -229,53 +229,10 @@ public class ClusterIoTDB implements ClusterIoTDBMBean {
   }
 
   public static void main(String[] args) {
-    if (args.length < 1) {
-      logger.error(
-          "Usage: <-s|-a|-r> "
-              + "[-D{} <configure folder>] \n"
-              + "-s: start the node as a seed\n"
-              + "-a: start the node as a new node\n"
-              + "-r: remove the node out of the cluster\n",
-          IoTDBConstant.IOTDB_CONF);
-      return;
-    }
-
-    ClusterIoTDB cluster = ClusterIoTDBHolder.INSTANCE;
-    // check config of iotdb,and set some configs in cluster mode
-    try {
-      if (!cluster.serverCheckAndInit()) {
-        return;
-      }
-    } catch (ConfigurationException | IOException e) {
-      logger.error("meet error when doing start checking", e);
-      return;
-    }
-    String mode = args[0];
-    logger.info("Running mode {}", mode);
-
-    // initialize the current node and its services
-    if (!cluster.initLocalEngines()) {
-      logger.error("initLocalEngines error, stop process!");
-      return;
-    }
-
-    // we start IoTDB kernel first. then we start the cluster module.
-    if (MODE_START.equals(mode)) {
-      cluster.activeStartNodeMode();
-    } else if (MODE_ADD.equals(mode)) {
-      cluster.activeAddNodeMode();
-    } else if (MODE_REMOVE.equals(mode)) {
-      try {
-        cluster.doRemoveNode(args);
-      } catch (IOException e) {
-        logger.error("Fail to remove node in cluster", e);
-      }
-    } else {
-      logger.error("Unrecognized mode {}", mode);
-    }
+    new ClusterIoTDBServerCommandLine().doMain(args);
   }
 
-  private boolean serverCheckAndInit() throws ConfigurationException, 
IOException {
+  protected boolean serverCheckAndInit() throws ConfigurationException, 
IOException {
     IoTDBConfigCheck.getInstance().checkConfig();
     IoTDBConfig config = IoTDBDescriptor.getInstance().getConfig();
     // init server's configuration first, because the cluster configuration 
may read settings from
@@ -485,7 +442,7 @@ public class ClusterIoTDB implements ClusterIoTDBMBean {
     }
   }
 
-  private void doRemoveNode(String[] args) throws IOException {
+  protected void doRemoveNode(String[] args) throws IOException {
     if (args.length != 3) {
       logger.error("Usage: <ip> <metaPort>");
       return;
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/ClusterIoTDBServerCommandLine.java
 
b/cluster/src/main/java/org/apache/iotdb/cluster/ClusterIoTDBServerCommandLine.java
new file mode 100644
index 0000000..2cc43b2
--- /dev/null
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/ClusterIoTDBServerCommandLine.java
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.cluster;
+
+import org.apache.iotdb.commons.ServerCommandLine;
+import org.apache.iotdb.db.exception.ConfigurationException;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+
+public class ClusterIoTDBServerCommandLine extends ServerCommandLine {
+  private static final Logger logger = 
LoggerFactory.getLogger(ClusterIoTDBServerCommandLine.class);
+
+  // establish the cluster as a seed
+  private static final String MODE_START = "-s";
+  // join an established cluster
+  private static final String MODE_ADD = "-a";
+  // send a request to remove a node, more arguments: ip-of-removed-node
+  // metaport-of-removed-node
+  private static final String MODE_REMOVE = "-r";
+
+  private static final String USAGE =
+      "Usage: <-s|-a|-r> "
+          + "[-D{} <configure folder>] \n"
+          + "-s: start the node as a seed\n"
+          + "-a: start the node as a new node\n"
+          + "-r: remove the node out of the cluster\n";
+
+  @Override
+  protected String getUsage() {
+    return USAGE;
+  }
+
+  @Override
+  protected int run(String[] args) {
+    if (args.length < 1) {
+      usage(null);
+      return -1;
+    }
+
+    ClusterIoTDB cluster = ClusterIoTDB.getInstance();
+    // check config of iotdb,and set some configs in cluster mode
+    try {
+      if (!cluster.serverCheckAndInit()) {
+        return -1;
+      }
+    } catch (ConfigurationException | IOException e) {
+      logger.error("meet error when doing start checking", e);
+      return -1;
+    }
+    String mode = args[0];
+    logger.info("Running mode {}", mode);
+
+    // initialize the current node and its services
+    if (!cluster.initLocalEngines()) {
+      logger.error("initLocalEngines error, stop process!");
+      return -1;
+    }
+
+    // we start IoTDB kernel first. then we start the cluster module.
+    if (MODE_START.equals(mode)) {
+      cluster.activeStartNodeMode();
+    } else if (MODE_ADD.equals(mode)) {
+      cluster.activeAddNodeMode();
+    } else if (MODE_REMOVE.equals(mode)) {
+      try {
+        cluster.doRemoveNode(args);
+      } catch (IOException e) {
+        logger.error("Fail to remove node in cluster", e);
+      }
+    } else {
+      logger.error("Unrecognized mode {}", mode);
+    }
+    return 0;
+  }
+}
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/client/async/AsyncDataClient.java
 
b/cluster/src/main/java/org/apache/iotdb/cluster/client/async/AsyncDataClient.java
index cb9c798..ebfb7de 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/client/async/AsyncDataClient.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/client/async/AsyncDataClient.java
@@ -26,7 +26,7 @@ import org.apache.iotdb.cluster.config.ClusterConstant;
 import org.apache.iotdb.cluster.rpc.thrift.Node;
 import org.apache.iotdb.cluster.rpc.thrift.TSDataService;
 import org.apache.iotdb.cluster.utils.ClientUtils;
-import org.apache.iotdb.db.utils.TestOnly;
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.rpc.TNonblockingSocketWrapper;
 
 import org.apache.commons.pool2.PooledObject;
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/client/async/AsyncMetaClient.java
 
b/cluster/src/main/java/org/apache/iotdb/cluster/client/async/AsyncMetaClient.java
index c2ad2c4..6d4c039 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/client/async/AsyncMetaClient.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/client/async/AsyncMetaClient.java
@@ -25,7 +25,7 @@ import org.apache.iotdb.cluster.config.ClusterConstant;
 import org.apache.iotdb.cluster.rpc.thrift.Node;
 import org.apache.iotdb.cluster.rpc.thrift.TSMetaService;
 import org.apache.iotdb.cluster.utils.ClientUtils;
-import org.apache.iotdb.db.utils.TestOnly;
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.rpc.TNonblockingSocketWrapper;
 
 import org.apache.commons.pool2.PooledObject;
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/client/sync/SyncDataClient.java
 
b/cluster/src/main/java/org/apache/iotdb/cluster/client/sync/SyncDataClient.java
index 2f52d4f..75aa6a0 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/client/sync/SyncDataClient.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/client/sync/SyncDataClient.java
@@ -26,7 +26,7 @@ import org.apache.iotdb.cluster.config.ClusterConstant;
 import org.apache.iotdb.cluster.rpc.thrift.Node;
 import org.apache.iotdb.cluster.rpc.thrift.TSDataService;
 import org.apache.iotdb.cluster.utils.ClientUtils;
-import org.apache.iotdb.db.utils.TestOnly;
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.rpc.RpcTransportFactory;
 import org.apache.iotdb.rpc.TConfigurationConst;
 import org.apache.iotdb.rpc.TimeoutChangeableTransport;
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/client/sync/SyncMetaClient.java
 
b/cluster/src/main/java/org/apache/iotdb/cluster/client/sync/SyncMetaClient.java
index 1e93a17..2d2481c 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/client/sync/SyncMetaClient.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/client/sync/SyncMetaClient.java
@@ -26,7 +26,7 @@ import org.apache.iotdb.cluster.config.ClusterConstant;
 import org.apache.iotdb.cluster.rpc.thrift.Node;
 import org.apache.iotdb.cluster.rpc.thrift.TSMetaService;
 import org.apache.iotdb.cluster.utils.ClientUtils;
-import org.apache.iotdb.db.utils.TestOnly;
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.rpc.RpcTransportFactory;
 import org.apache.iotdb.rpc.TConfigurationConst;
 import org.apache.iotdb.rpc.TimeoutChangeableTransport;
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/config/ClusterConstant.java 
b/cluster/src/main/java/org/apache/iotdb/cluster/config/ClusterConstant.java
index cb892ae..529f44f 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/config/ClusterConstant.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/config/ClusterConstant.java
@@ -19,7 +19,7 @@
 package org.apache.iotdb.cluster.config;
 
 import org.apache.iotdb.cluster.rpc.thrift.Node;
-import org.apache.iotdb.db.utils.TestOnly;
+import org.apache.iotdb.commons.utils.TestOnly;
 
 public class ClusterConstant {
 
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/coordinator/Coordinator.java 
b/cluster/src/main/java/org/apache/iotdb/cluster/coordinator/Coordinator.java
index 098b127..43faa86 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/coordinator/Coordinator.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/coordinator/Coordinator.java
@@ -38,6 +38,7 @@ import org.apache.iotdb.cluster.server.member.MetaGroupMember;
 import org.apache.iotdb.cluster.server.monitor.Timer;
 import org.apache.iotdb.cluster.utils.PartitionUtils;
 import org.apache.iotdb.cluster.utils.StatusUtils;
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBConstant;
 import org.apache.iotdb.db.exception.metadata.IllegalPathException;
 import org.apache.iotdb.db.exception.metadata.MetadataException;
@@ -57,7 +58,6 @@ import 
org.apache.iotdb.db.qp.physical.sys.CreateTimeSeriesPlan;
 import org.apache.iotdb.db.qp.physical.sys.DeleteTimeSeriesPlan;
 import org.apache.iotdb.db.qp.physical.sys.SetTemplatePlan;
 import org.apache.iotdb.db.service.IoTDB;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.rpc.RpcUtils;
 import org.apache.iotdb.rpc.TSStatusCode;
 import org.apache.iotdb.service.rpc.thrift.EndPoint;
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/log/LogDispatcher.java 
b/cluster/src/main/java/org/apache/iotdb/cluster/log/LogDispatcher.java
index 226593a..96c01a0 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/log/LogDispatcher.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/log/LogDispatcher.java
@@ -30,10 +30,10 @@ import org.apache.iotdb.cluster.server.member.RaftMember;
 import org.apache.iotdb.cluster.server.monitor.Peer;
 import org.apache.iotdb.cluster.server.monitor.Timer;
 import org.apache.iotdb.cluster.utils.ClientUtils;
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.concurrent.IoTDBThreadPoolFactory;
 import org.apache.iotdb.db.conf.IoTDBConstant;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
-import org.apache.iotdb.db.utils.TestOnly;
 
 import org.apache.thrift.TException;
 import org.apache.thrift.async.AsyncMethodCallback;
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/log/applier/BaseApplier.java 
b/cluster/src/main/java/org/apache/iotdb/cluster/log/applier/BaseApplier.java
index e2b1556..981c1e8 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/log/applier/BaseApplier.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/log/applier/BaseApplier.java
@@ -26,6 +26,7 @@ import org.apache.iotdb.cluster.query.ClusterPlanExecutor;
 import org.apache.iotdb.cluster.rpc.thrift.RaftNode;
 import org.apache.iotdb.cluster.server.member.DataGroupMember;
 import org.apache.iotdb.cluster.server.member.MetaGroupMember;
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.exception.BatchProcessException;
 import org.apache.iotdb.db.exception.StorageEngineException;
@@ -41,7 +42,6 @@ import org.apache.iotdb.db.qp.physical.PhysicalPlan;
 import org.apache.iotdb.db.qp.physical.crud.InsertPlan;
 import org.apache.iotdb.db.qp.physical.sys.DeleteTimeSeriesPlan;
 import org.apache.iotdb.db.utils.SchemaUtils;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.rpc.TSStatusCode;
 import org.apache.iotdb.service.rpc.thrift.TSStatus;
 
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/log/catchup/CatchUpTask.java 
b/cluster/src/main/java/org/apache/iotdb/cluster/log/catchup/CatchUpTask.java
index 8b868b6..f11f41e 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/log/catchup/CatchUpTask.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/log/catchup/CatchUpTask.java
@@ -33,7 +33,7 @@ import org.apache.iotdb.cluster.server.NodeCharacter;
 import org.apache.iotdb.cluster.server.member.RaftMember;
 import org.apache.iotdb.cluster.server.monitor.Peer;
 import org.apache.iotdb.cluster.utils.ClientUtils;
-import org.apache.iotdb.db.utils.TestOnly;
+import org.apache.iotdb.commons.utils.TestOnly;
 
 import org.apache.thrift.TException;
 import org.slf4j.Logger;
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/log/catchup/LogCatchUpTask.java
 
b/cluster/src/main/java/org/apache/iotdb/cluster/log/catchup/LogCatchUpTask.java
index 544cc71..f5f56ea 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/log/catchup/LogCatchUpTask.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/log/catchup/LogCatchUpTask.java
@@ -33,9 +33,9 @@ import 
org.apache.iotdb.cluster.server.handlers.caller.LogCatchUpHandler;
 import 
org.apache.iotdb.cluster.server.handlers.caller.LogCatchUpInBatchHandler;
 import org.apache.iotdb.cluster.server.member.RaftMember;
 import org.apache.iotdb.cluster.utils.ClientUtils;
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBConstant;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
-import org.apache.iotdb.db.utils.TestOnly;
 
 import org.apache.thrift.TException;
 import org.slf4j.Logger;
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/log/manage/CommittedEntryManager.java
 
b/cluster/src/main/java/org/apache/iotdb/cluster/log/manage/CommittedEntryManager.java
index 4ecd167..c1ccabc 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/log/manage/CommittedEntryManager.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/log/manage/CommittedEntryManager.java
@@ -26,7 +26,7 @@ import org.apache.iotdb.cluster.log.Log;
 import org.apache.iotdb.cluster.log.Snapshot;
 import org.apache.iotdb.cluster.log.logtypes.EmptyContentLog;
 import org.apache.iotdb.cluster.log.manage.serializable.LogManagerMeta;
-import org.apache.iotdb.db.utils.TestOnly;
+import org.apache.iotdb.commons.utils.TestOnly;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/log/manage/RaftLogManager.java 
b/cluster/src/main/java/org/apache/iotdb/cluster/log/manage/RaftLogManager.java
index 653680d..fd86c59 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/log/manage/RaftLogManager.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/log/manage/RaftLogManager.java
@@ -32,8 +32,8 @@ import org.apache.iotdb.cluster.log.Snapshot;
 import org.apache.iotdb.cluster.log.StableEntryManager;
 import org.apache.iotdb.cluster.log.manage.serializable.LogManagerMeta;
 import org.apache.iotdb.cluster.server.monitor.Timer.Statistic;
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.concurrent.IoTDBThreadPoolFactory;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.tsfile.utils.RamUsageEstimator;
 
 import org.slf4j.Logger;
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/log/manage/UnCommittedEntryManager.java
 
b/cluster/src/main/java/org/apache/iotdb/cluster/log/manage/UnCommittedEntryManager.java
index a3026c9..826e076 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/log/manage/UnCommittedEntryManager.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/log/manage/UnCommittedEntryManager.java
@@ -22,7 +22,7 @@ package org.apache.iotdb.cluster.log.manage;
 import org.apache.iotdb.cluster.exception.EntryUnavailableException;
 import org.apache.iotdb.cluster.log.Log;
 import org.apache.iotdb.cluster.log.Snapshot;
-import org.apache.iotdb.db.utils.TestOnly;
+import org.apache.iotdb.commons.utils.TestOnly;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/log/manage/serializable/SyncLogDequeSerializer.java
 
b/cluster/src/main/java/org/apache/iotdb/cluster/log/manage/serializable/SyncLogDequeSerializer.java
index 7579a51..65329b4 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/log/manage/serializable/SyncLogDequeSerializer.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/log/manage/serializable/SyncLogDequeSerializer.java
@@ -24,11 +24,11 @@ import org.apache.iotdb.cluster.log.HardState;
 import org.apache.iotdb.cluster.log.Log;
 import org.apache.iotdb.cluster.log.LogParser;
 import org.apache.iotdb.cluster.log.StableEntryManager;
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.engine.fileSystem.SystemFileFactory;
 import org.apache.iotdb.db.engine.version.SimpleFileVersionController;
 import org.apache.iotdb.db.engine.version.VersionController;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.tsfile.utils.BytesUtils;
 import org.apache.iotdb.tsfile.utils.Pair;
 import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/query/ClusterPlanExecutor.java 
b/cluster/src/main/java/org/apache/iotdb/cluster/query/ClusterPlanExecutor.java
index 04ef012..f3707da 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/query/ClusterPlanExecutor.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/query/ClusterPlanExecutor.java
@@ -34,6 +34,7 @@ import org.apache.iotdb.cluster.query.manage.QueryCoordinator;
 import org.apache.iotdb.cluster.rpc.thrift.Node;
 import org.apache.iotdb.cluster.server.member.DataGroupMember;
 import org.apache.iotdb.cluster.server.member.MetaGroupMember;
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBConstant;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.engine.StorageEngine;
@@ -54,7 +55,6 @@ import 
org.apache.iotdb.db.qp.physical.sys.LoadConfigurationPlan;
 import org.apache.iotdb.db.qp.physical.sys.ShowPlan;
 import org.apache.iotdb.db.query.context.QueryContext;
 import org.apache.iotdb.db.service.IoTDB;
-import org.apache.iotdb.db.utils.TestOnly;
 import 
org.apache.iotdb.tsfile.exception.filter.QueryFilterOptimizationException;
 import org.apache.iotdb.tsfile.read.query.dataset.QueryDataSet;
 
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/query/ClusterPlanRouter.java 
b/cluster/src/main/java/org/apache/iotdb/cluster/query/ClusterPlanRouter.java
index 8b1ad59..8c1de4f 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/query/ClusterPlanRouter.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/query/ClusterPlanRouter.java
@@ -28,6 +28,7 @@ import org.apache.iotdb.cluster.partition.PartitionGroup;
 import org.apache.iotdb.cluster.partition.PartitionTable;
 import org.apache.iotdb.cluster.rpc.thrift.Node;
 import org.apache.iotdb.cluster.utils.PartitionUtils;
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.engine.StorageEngine;
 import org.apache.iotdb.db.exception.metadata.MetadataException;
 import org.apache.iotdb.db.metadata.MManager;
@@ -45,7 +46,6 @@ import 
org.apache.iotdb.db.qp.physical.sys.CreateTimeSeriesPlan;
 import org.apache.iotdb.db.qp.physical.sys.LogPlan;
 import org.apache.iotdb.db.qp.physical.sys.ShowChildPathsPlan;
 import org.apache.iotdb.db.service.IoTDB;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.utils.Binary;
 import org.apache.iotdb.tsfile.utils.BitMap;
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/query/reader/ClusterTimeGenerator.java
 
b/cluster/src/main/java/org/apache/iotdb/cluster/query/reader/ClusterTimeGenerator.java
index 4d63f99..08ae23b 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/query/reader/ClusterTimeGenerator.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/query/reader/ClusterTimeGenerator.java
@@ -23,6 +23,7 @@ import 
org.apache.iotdb.cluster.exception.CheckConsistencyException;
 import org.apache.iotdb.cluster.partition.PartitionGroup;
 import org.apache.iotdb.cluster.server.member.DataGroupMember;
 import org.apache.iotdb.cluster.server.member.MetaGroupMember;
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.exception.StorageEngineException;
 import org.apache.iotdb.db.metadata.path.PartialPath;
 import org.apache.iotdb.db.qp.physical.crud.RawDataQueryPlan;
@@ -30,7 +31,6 @@ import org.apache.iotdb.db.query.context.QueryContext;
 import org.apache.iotdb.db.query.reader.series.ManagedSeriesReader;
 import org.apache.iotdb.db.query.timegenerator.ServerTimeGenerator;
 import org.apache.iotdb.db.service.IoTDB;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.tsfile.exception.write.UnSupportedDataTypeException;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.expression.ExpressionType;
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/server/member/DataGroupMember.java
 
b/cluster/src/main/java/org/apache/iotdb/cluster/server/member/DataGroupMember.java
index 36ee967..5682c15 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/server/member/DataGroupMember.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/server/member/DataGroupMember.java
@@ -71,6 +71,7 @@ import org.apache.iotdb.cluster.server.monitor.Timer;
 import org.apache.iotdb.cluster.server.monitor.Timer.Statistic;
 import org.apache.iotdb.cluster.utils.IOUtils;
 import org.apache.iotdb.cluster.utils.StatusUtils;
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.concurrent.IoTDBThreadPoolFactory;
 import org.apache.iotdb.db.conf.IoTDBConstant;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
@@ -91,7 +92,6 @@ import org.apache.iotdb.db.qp.physical.sys.FlushPlan;
 import org.apache.iotdb.db.qp.physical.sys.LogPlan;
 import org.apache.iotdb.db.service.IoTDB;
 import org.apache.iotdb.db.service.JMXService;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.rpc.TSStatusCode;
 import org.apache.iotdb.service.rpc.thrift.EndPoint;
 import org.apache.iotdb.service.rpc.thrift.TSStatus;
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/server/member/MetaGroupMember.java
 
b/cluster/src/main/java/org/apache/iotdb/cluster/server/member/MetaGroupMember.java
index f057131..9691c25 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/server/member/MetaGroupMember.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/server/member/MetaGroupMember.java
@@ -74,6 +74,7 @@ import org.apache.iotdb.cluster.utils.ClusterUtils;
 import org.apache.iotdb.cluster.utils.PartitionUtils;
 import org.apache.iotdb.cluster.utils.StatusUtils;
 import org.apache.iotdb.cluster.utils.nodetool.function.Status;
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBConstant;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.engine.StorageEngine;
@@ -84,7 +85,6 @@ import org.apache.iotdb.db.qp.physical.PhysicalPlan;
 import org.apache.iotdb.db.service.IService;
 import org.apache.iotdb.db.service.IoTDB;
 import org.apache.iotdb.db.service.ServiceType;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.db.utils.TimeValuePairUtils;
 import org.apache.iotdb.db.utils.TimeValuePairUtils.Intervals;
 import org.apache.iotdb.service.rpc.thrift.EndPoint;
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/server/member/RaftMember.java 
b/cluster/src/main/java/org/apache/iotdb/cluster/server/member/RaftMember.java
index 133af64..c13720f 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/server/member/RaftMember.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/server/member/RaftMember.java
@@ -65,6 +65,7 @@ import org.apache.iotdb.cluster.utils.ClientUtils;
 import org.apache.iotdb.cluster.utils.IOUtils;
 import org.apache.iotdb.cluster.utils.PlanSerializer;
 import org.apache.iotdb.cluster.utils.StatusUtils;
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.concurrent.IoTDBThreadPoolFactory;
 import org.apache.iotdb.db.concurrent.IoTThreadFactory;
 import org.apache.iotdb.db.conf.IoTDBConstant;
@@ -81,7 +82,6 @@ import 
org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.qp.executor.PlanExecutor;
 import org.apache.iotdb.db.qp.physical.PhysicalPlan;
 import org.apache.iotdb.db.qp.physical.sys.LogPlan;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.rpc.RpcUtils;
 import org.apache.iotdb.rpc.TSStatusCode;
 import org.apache.iotdb.service.rpc.thrift.TSStatus;
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/server/monitor/NodeStatusManager.java
 
b/cluster/src/main/java/org/apache/iotdb/cluster/server/monitor/NodeStatusManager.java
index 6989bf9..aa42dba 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/server/monitor/NodeStatusManager.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/server/monitor/NodeStatusManager.java
@@ -27,7 +27,7 @@ import org.apache.iotdb.cluster.rpc.thrift.Node;
 import org.apache.iotdb.cluster.rpc.thrift.TNodeStatus;
 import org.apache.iotdb.cluster.server.member.MetaGroupMember;
 import org.apache.iotdb.cluster.utils.ClientUtils;
-import org.apache.iotdb.db.utils.TestOnly;
+import org.apache.iotdb.commons.utils.TestOnly;
 
 import org.apache.thrift.TException;
 import org.slf4j.Logger;
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/server/service/DataGroupEngine.java
 
b/cluster/src/main/java/org/apache/iotdb/cluster/server/service/DataGroupEngine.java
index 58593af..c8520a7 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/server/service/DataGroupEngine.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/server/service/DataGroupEngine.java
@@ -39,10 +39,10 @@ import org.apache.iotdb.cluster.server.StoppedMemberManager;
 import org.apache.iotdb.cluster.server.member.DataGroupMember;
 import org.apache.iotdb.cluster.server.member.MetaGroupMember;
 import org.apache.iotdb.cluster.server.monitor.NodeReport.DataMemberReport;
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.exception.StartupException;
 import org.apache.iotdb.db.service.IService;
 import org.apache.iotdb.db.service.ServiceType;
-import org.apache.iotdb.db.utils.TestOnly;
 
 import org.apache.thrift.async.AsyncMethodCallback;
 import org.apache.thrift.protocol.TProtocolFactory;
diff --git a/confignode/pom.xml b/confignode/pom.xml
index 388d5c7..9ce832c 100644
--- a/confignode/pom.xml
+++ b/confignode/pom.xml
@@ -51,12 +51,6 @@
             <version>${project.version}</version>
         </dependency>
         <dependency>
-            <groupId>org.jetbrains</groupId>
-            <artifactId>annotations</artifactId>
-            <version>23.0.0</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <version>${junit.version}</version>
diff --git a/confignode/src/assembly/resources/sbin/start-confignode.bat 
b/confignode/src/assembly/resources/sbin/start-confignode.bat
index c80fbf7..025deb2 100644
--- a/confignode/src/assembly/resources/sbin/start-confignode.bat
+++ b/confignode/src/assembly/resources/sbin/start-confignode.bat
@@ -68,8 +68,6 @@ for %%i in (%*) do (
        ) ELSE IF "!is_conf_path!" == "true" (
                set is_conf_path=false
                set CONFIGNODE_CONF=%%i
-       ) ELSE (
-               set CONF_PARAMS=!CONF_PARAMS! %%i
        )
 )
 
@@ -79,6 +77,7 @@ IF EXIST "%CONFIGNODE_CONF%\confignode-env.bat" (
     echo "can't find %CONFIGNODE_CONF%\confignode-env.bat"
     )
 
+set CONF_PARAMS=-s
 if NOT DEFINED MAIN_CLASS set 
MAIN_CLASS=org.apache.iotdb.confignode.service.ConfigNode
 if NOT DEFINED JAVA_HOME goto :err
 
diff --git a/confignode/src/assembly/resources/sbin/start-confignode.sh 
b/confignode/src/assembly/resources/sbin/start-confignode.sh
index 5d2f360..f8d20fe 100644
--- a/confignode/src/assembly/resources/sbin/start-confignode.sh
+++ b/confignode/src/assembly/resources/sbin/start-confignode.sh
@@ -44,7 +44,7 @@ for arg do
   set -- "$@" "$arg"
 done
 
-CONF_PARAMS=$*
+CONF_PARAMS="-s "$*
 
 if [ -f "$CONFIGNODE_CONF/confignode-env.sh" ]; then
     if [ "$#" -ge "1" -a "$1" == "printgc" ]; then
diff --git 
a/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeConfCheck.java
 
b/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeConfCheck.java
index de93a5b..ca43603 100644
--- 
a/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeConfCheck.java
+++ 
b/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeConfCheck.java
@@ -70,10 +70,10 @@ public class ConfigNodeConfCheck {
       }
     }
 
-    FileInputStream inputStream = new FileInputStream(specialPropertiesFile);
-    specialProperties.load(inputStream);
-    checkSpecialProperties();
-    inputStream.close();
+    try (FileInputStream inputStream = new 
FileInputStream(specialPropertiesFile)) {
+      specialProperties.load(inputStream);
+      checkSpecialProperties();
+    }
   }
 
   /**
diff --git 
a/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
 
b/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
index 260535e..90e2d2e 100644
--- 
a/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
+++ 
b/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
@@ -19,12 +19,12 @@
 package org.apache.iotdb.confignode.manager;
 
 import org.apache.iotdb.commons.hash.DeviceGroupHashExecutor;
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.confignode.conf.ConfigNodeConf;
 import org.apache.iotdb.confignode.conf.ConfigNodeDescriptor;
 import org.apache.iotdb.confignode.partition.PartitionTable;
 import org.apache.iotdb.confignode.service.balancer.LoadBalancer;
 
-import org.jetbrains.annotations.TestOnly;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git 
a/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java 
b/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java
index f081c56..be2b4aa 100644
--- 
a/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java
+++ 
b/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java
@@ -18,9 +18,7 @@
  */
 package org.apache.iotdb.confignode.service;
 
-import org.apache.iotdb.confignode.conf.ConfigNodeConfCheck;
 import org.apache.iotdb.confignode.conf.ConfigNodeConstant;
-import org.apache.iotdb.confignode.exception.ConfigNodeException;
 import org.apache.iotdb.confignode.exception.startup.StartupException;
 import org.apache.iotdb.confignode.service.register.JMXService;
 import org.apache.iotdb.confignode.service.register.RegisterManager;
@@ -29,8 +27,6 @@ import 
org.apache.iotdb.confignode.service.startup.StartupChecks;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.IOException;
-
 public class ConfigNode implements ConfigNodeMBean {
 
   private static final Logger LOGGER = 
LoggerFactory.getLogger(ConfigNode.class);
@@ -47,16 +43,17 @@ public class ConfigNode implements ConfigNodeMBean {
   }
 
   public static void main(String[] args) {
-    try {
-      // Check parameters
-      ConfigNodeConfCheck.getInstance().checkConfig();
-    } catch (ConfigNodeException | IOException e) {
-      LOGGER.error("Meet error when doing start checking", e);
-      System.exit(1);
-    }
+    new ConfigNodeCommandLine().doMain(args);
+  }
 
-    ConfigNode daemon = ConfigNode.getInstance();
-    daemon.active();
+  /** Register services */
+  private void setUp() throws StartupException {
+    LOGGER.info("Setting up {}...", ConfigNodeConstant.GLOBAL_NAME);
+    registerManager.register(JMXService.getInstance());
+    JMXService.registerMBean(getInstance(), mbeanName);
+    LOGGER.info(
+        "Congratulation, {} is set up successfully. Now, enjoy yourself!",
+        ConfigNodeConstant.GLOBAL_NAME);
   }
 
   public void active() {
@@ -82,16 +79,6 @@ public class ConfigNode implements ConfigNodeMBean {
     LOGGER.info("{} has started.", ConfigNodeConstant.GLOBAL_NAME);
   }
 
-  /** Register services */
-  private void setUp() throws StartupException {
-    LOGGER.info("Setting up {}...", ConfigNodeConstant.GLOBAL_NAME);
-    registerManager.register(JMXService.getInstance());
-    JMXService.registerMBean(getInstance(), mbeanName);
-    LOGGER.info(
-        "Congratulation, {} is set up successfully. Now, enjoy yourself!",
-        ConfigNodeConstant.GLOBAL_NAME);
-  }
-
   public void deactivate() {
     LOGGER.info("Deactivating {}...", ConfigNodeConstant.GLOBAL_NAME);
     registerManager.deregisterAll();
diff --git 
a/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNodeCommandLine.java
 
b/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNodeCommandLine.java
new file mode 100644
index 0000000..01f8a84
--- /dev/null
+++ 
b/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNodeCommandLine.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.confignode.service;
+
+import org.apache.iotdb.commons.ServerCommandLine;
+import org.apache.iotdb.confignode.conf.ConfigNodeConfCheck;
+import org.apache.iotdb.confignode.exception.ConfigNodeException;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+
+public class ConfigNodeCommandLine extends ServerCommandLine {
+  private static final Logger LOGGER = 
LoggerFactory.getLogger(ConfigNodeCommandLine.class);
+
+  // establish the cluster as a seed
+  private static final String MODE_START = "-s";
+  // join an established cluster
+  private static final String MODE_ADD = "-a";
+  // send a request to remove a node, more arguments: ip-of-removed-node
+  // metaport-of-removed-node
+  private static final String MODE_REMOVE = "-r";
+
+  private static final String USAGE =
+      "Usage: <-s|-a|-r> "
+          + "[-D{} <configure folder>] \n"
+          + "-s: start the node as a seed\n"
+          + "-a: start the node as a new node\n"
+          + "-r: remove the node out of the cluster\n";
+
+  @Override
+  protected String getUsage() {
+    return USAGE;
+  }
+
+  @Override
+  protected int run(String[] args) {
+    if (args.length < 1) {
+      usage(null);
+      return -1;
+    }
+
+    String mode = args[0];
+    LOGGER.info("Running mode {}", mode);
+    if (MODE_START.equals(mode)) {
+      try {
+        // Check parameters
+        ConfigNodeConfCheck.getInstance().checkConfig();
+      } catch (ConfigNodeException | IOException e) {
+        LOGGER.error("Meet error when doing start checking", e);
+        return -1;
+      }
+      ConfigNode configNode = ConfigNode.getInstance();
+      configNode.active();
+    } else if (MODE_ADD.equals(mode)) {
+      // TODO: add node
+    } else if (MODE_REMOVE.equals(mode)) {
+      // TODO: remove node
+    }
+
+    return 0;
+  }
+}
diff --git 
a/confignode/src/test/java/org/apache/iotdb/confignode/utils/ConfigNodeEnvironmentUtils.java
 
b/confignode/src/test/java/org/apache/iotdb/confignode/utils/ConfigNodeEnvironmentUtils.java
index a14a31d..39252f7 100644
--- 
a/confignode/src/test/java/org/apache/iotdb/confignode/utils/ConfigNodeEnvironmentUtils.java
+++ 
b/confignode/src/test/java/org/apache/iotdb/confignode/utils/ConfigNodeEnvironmentUtils.java
@@ -18,11 +18,11 @@
  */
 package org.apache.iotdb.confignode.utils;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.confignode.conf.ConfigNodeConstant;
 import org.apache.iotdb.confignode.service.ConfigNode;
 
 import org.apache.commons.io.FileUtils;
-import org.jetbrains.annotations.TestOnly;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/iotdb-commons/pom.xml b/iotdb-commons/pom.xml
index 588ebc0..30be568 100644
--- a/iotdb-commons/pom.xml
+++ b/iotdb-commons/pom.xml
@@ -29,4 +29,131 @@
     </parent>
     <artifactId>iotdb-commons</artifactId>
     <name>IoTDB commons</name>
+    <properties>
+        <commons.test.skip>false</commons.test.skip>
+        <commons.it.skip>${commons.test.skip}</commons.it.skip>
+        <commons.ut.skip>${commons.test.skip}</commons.ut.skip>
+    </properties>
+    <build>
+        <plugins>
+            <!--
+        Generate an OSGI compatible MANIFEST file.
+      -->
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <version>${felix.version}</version>
+                <executions>
+                    <execution>
+                        <id>bundle-manifest</id>
+                        <phase>process-classes</phase>
+                        <goals>
+                            <goal>manifest</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <exportScr>true</exportScr>
+                    <instructions>
+                        <_include>-bnd.bnd</_include>
+                        
<_removeheaders>Bnd-LastModified,Built-By</_removeheaders>
+                        <Embed-Dependency>dependencies</Embed-Dependency>
+                    </instructions>
+                </configuration>
+            </plugin>
+            <!--
+              Use the MANIFEST file generated by the maven-bundle-plugin.
+            -->
+            <plugin>
+                <artifactId>maven-jar-plugin</artifactId>
+                <configuration>
+                    <archive>
+                        
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
+                    </archive>
+                </configuration>
+            </plugin>
+            <!--using `mvn test` to run UT, `mvn verify` to run ITs
+            Reference: 
https://antoniogoncalves.org/2012/12/13/lets-turn-integration-tests-with-maven-to-a-first-class-citizen/-->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <skipTests>${commons.ut.skip}</skipTests>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-failsafe-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>run-integration-tests</id>
+                        <phase>integration-test</phase>
+                        <goals>
+                            <goal>integration-test</goal>
+                            <goal>verify</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <skipTests>${commons.test.skip}</skipTests>
+                    <skipITs>${commons.it.skip}</skipITs>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+    <profiles>
+        <profile>
+            <id>skipTsfileTests</id>
+            <activation>
+                <property>
+                    <name>skipTests</name>
+                    <value>true</value>
+                </property>
+            </activation>
+            <properties>
+                <tsfile.test.skip>true</tsfile.test.skip>
+                <tsfile.ut.skip>true</tsfile.ut.skip>
+                <tsfile.it.skip>true</tsfile.it.skip>
+            </properties>
+        </profile>
+        <profile>
+            <id>skipUT_TsFileTests</id>
+            <activation>
+                <property>
+                    <name>skipUTs</name>
+                    <value>true</value>
+                </property>
+            </activation>
+            <properties>
+                <tsfile.ut.skip>true</tsfile.ut.skip>
+            </properties>
+        </profile>
+        <profile>
+            <id>get-jar-with-dependencies</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <artifactId>maven-assembly-plugin</artifactId>
+                        <version>${maven.assembly.version}</version>
+                        <configuration>
+                            <descriptorRefs>
+                                
<descriptorRef>jar-with-dependencies</descriptorRef>
+                            </descriptorRefs>
+                        </configuration>
+                        <executions>
+                            <execution>
+                                <id>make-assembly</id>
+                                <!-- this is used for inheritance merges -->
+                                <phase>package</phase>
+                                <!-- bind to the packaging phase -->
+                                <goals>
+                                    <goal>single</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
 </project>
diff --git 
a/iotdb-commons/src/main/java/org/apache/iotdb/commons/ServerCommandLine.java 
b/iotdb-commons/src/main/java/org/apache/iotdb/commons/ServerCommandLine.java
new file mode 100644
index 0000000..5b481a9
--- /dev/null
+++ 
b/iotdb-commons/src/main/java/org/apache/iotdb/commons/ServerCommandLine.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.commons;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class ServerCommandLine {
+  private static final Logger LOG = 
LoggerFactory.getLogger(ServerCommandLine.class);
+
+  /**
+   * Implementing subclasses should return a usage string to print out
+   *
+   * @return usage
+   */
+  protected abstract String getUsage();
+
+  /**
+   * run command
+   *
+   * @param args system args
+   * @return return 0 if exec success
+   */
+  protected abstract int run(String args[]);
+
+  protected void usage(String message) {
+    if (message != null) {
+      System.err.println(message);
+      System.err.println("");
+    }
+
+    System.err.println(getUsage());
+  }
+
+  /**
+   * Parse and run the given command line.
+   *
+   * @param args system args
+   */
+  public void doMain(String args[]) {
+    try {
+      int result = run(args);
+      if (result != 0) {
+        System.exit(result);
+      }
+    } catch (Exception e) {
+      LOG.error("Failed to execute system command", e);
+      System.exit(-1);
+    }
+  }
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/TestOnly.java 
b/iotdb-commons/src/main/java/org/apache/iotdb/commons/utils/TestOnly.java
similarity index 96%
rename from server/src/main/java/org/apache/iotdb/db/utils/TestOnly.java
rename to 
iotdb-commons/src/main/java/org/apache/iotdb/commons/utils/TestOnly.java
index f9d5efc..05ade0b 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/TestOnly.java
+++ b/iotdb-commons/src/main/java/org/apache/iotdb/commons/utils/TestOnly.java
@@ -18,7 +18,7 @@
  *
  */
 
-package org.apache.iotdb.db.utils;
+package org.apache.iotdb.commons.utils;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/StorageEngine.java 
b/server/src/main/java/org/apache/iotdb/db/engine/StorageEngine.java
index 413518f..984c036 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/StorageEngine.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/StorageEngine.java
@@ -18,6 +18,7 @@
  */
 package org.apache.iotdb.db.engine;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.concurrent.IoTDBThreadPoolFactory;
 import org.apache.iotdb.db.concurrent.ThreadName;
 import org.apache.iotdb.db.conf.IoTDBConfig;
@@ -58,7 +59,6 @@ import org.apache.iotdb.db.rescon.SystemInfo;
 import org.apache.iotdb.db.service.IService;
 import org.apache.iotdb.db.service.IoTDB;
 import org.apache.iotdb.db.service.ServiceType;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.db.utils.ThreadUtils;
 import org.apache.iotdb.db.utils.UpgradeUtils;
 import org.apache.iotdb.rpc.RpcUtils;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/cache/BloomFilterCache.java 
b/server/src/main/java/org/apache/iotdb/db/engine/cache/BloomFilterCache.java
index 7b65477..c3e0d91 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/cache/BloomFilterCache.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/cache/BloomFilterCache.java
@@ -18,10 +18,10 @@
  */
 package org.apache.iotdb.db.engine.cache;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.query.control.FileReaderManager;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.tsfile.read.TsFileSequenceReader;
 import org.apache.iotdb.tsfile.utils.BloomFilter;
 import org.apache.iotdb.tsfile.utils.FilePathUtils;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCache.java 
b/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCache.java
index 4490734..0ee70f2 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCache.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCache.java
@@ -19,13 +19,13 @@
 
 package org.apache.iotdb.db.engine.cache;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.query.control.FileReaderManager;
 import org.apache.iotdb.db.service.metrics.Metric;
 import org.apache.iotdb.db.service.metrics.MetricsService;
 import org.apache.iotdb.db.service.metrics.Tag;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.metrics.config.MetricConfigDescriptor;
 import org.apache.iotdb.metrics.utils.MetricLevel;
 import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java
index 71c9086..cf796ff 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.db.engine.cache;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBConstant;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
@@ -26,7 +27,6 @@ import org.apache.iotdb.db.query.control.FileReaderManager;
 import org.apache.iotdb.db.service.metrics.Metric;
 import org.apache.iotdb.db.service.metrics.MetricsService;
 import org.apache.iotdb.db.service.metrics.Tag;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.metrics.config.MetricConfigDescriptor;
 import org.apache.iotdb.metrics.utils.MetricLevel;
 import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManager.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManager.java
index b608b14..e7b2e3b 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManager.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManager.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.db.engine.compaction;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.concurrent.IoTDBThreadPoolFactory;
 import org.apache.iotdb.db.concurrent.ThreadName;
 import 
org.apache.iotdb.db.concurrent.threadpool.WrappedScheduledExecutorService;
@@ -32,7 +33,6 @@ import org.apache.iotdb.db.service.ServiceType;
 import org.apache.iotdb.db.service.metrics.Metric;
 import org.apache.iotdb.db.service.metrics.MetricsService;
 import org.apache.iotdb.db.service.metrics.Tag;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.db.utils.datastructure.FixedPriorityBlockingQueue;
 import org.apache.iotdb.metrics.config.MetricConfigDescriptor;
 import org.apache.iotdb.metrics.type.Gauge;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/cq/ContinuousQueryService.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/cq/ContinuousQueryService.java
index fc1a148..1ae12eb 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/cq/ContinuousQueryService.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/cq/ContinuousQueryService.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.db.engine.cq;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.concurrent.IoTDBThreadPoolFactory;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.engine.fileSystem.SystemFileFactory;
@@ -31,7 +32,6 @@ import org.apache.iotdb.db.qp.utils.DatetimeUtils;
 import org.apache.iotdb.db.query.dataset.ShowContinuousQueriesResult;
 import org.apache.iotdb.db.service.IService;
 import org.apache.iotdb.db.service.ServiceType;
-import org.apache.iotdb.db.utils.TestOnly;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupInfo.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupInfo.java
index d1a7a75..a8ba599 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupInfo.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupInfo.java
@@ -18,10 +18,10 @@
  */
 package org.apache.iotdb.db.engine.storagegroup;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.rescon.SystemInfo;
 import org.apache.iotdb.db.utils.MmapUtil;
-import org.apache.iotdb.db.utils.TestOnly;
 
 import java.nio.ByteBuffer;
 import java.nio.MappedByteBuffer;
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 71eaef1..df6e20b 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
@@ -18,6 +18,7 @@
  */
 package org.apache.iotdb.db.engine.storagegroup;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.conf.adapter.CompressionRatio;
@@ -52,7 +53,6 @@ import org.apache.iotdb.db.rescon.MemTableManager;
 import org.apache.iotdb.db.rescon.PrimitiveArrayManager;
 import org.apache.iotdb.db.rescon.SystemInfo;
 import org.apache.iotdb.db.utils.MemUtils;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.db.utils.datastructure.AlignedTVList;
 import org.apache.iotdb.db.utils.datastructure.TVList;
 import org.apache.iotdb.db.writelog.WALFlushListener;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java
index e067233..f5962d0 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java
@@ -18,6 +18,7 @@
  */
 package org.apache.iotdb.db.engine.storagegroup;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.engine.modification.ModificationFile;
@@ -34,7 +35,6 @@ import 
org.apache.iotdb.db.exception.PartitionViolationException;
 import org.apache.iotdb.db.metadata.path.PartialPath;
 import org.apache.iotdb.db.query.filter.TsFileFilter;
 import org.apache.iotdb.db.service.UpgradeSevice;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.tsfile.common.constant.TsFileConstant;
 import org.apache.iotdb.tsfile.file.metadata.IChunkMetadata;
 import org.apache.iotdb.tsfile.file.metadata.ITimeSeriesMetadata;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResourceList.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResourceList.java
index 3446cd6..2f71a8e 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResourceList.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResourceList.java
@@ -19,7 +19,7 @@
 
 package org.apache.iotdb.db.engine.storagegroup;
 
-import org.apache.iotdb.db.utils.TestOnly;
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.tsfile.exception.NotImplementedException;
 
 import org.slf4j.Logger;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/VirtualStorageGroupProcessor.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/VirtualStorageGroupProcessor.java
index c2e4c26..6ac55e0 100755
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/VirtualStorageGroupProcessor.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/VirtualStorageGroupProcessor.java
@@ -18,6 +18,7 @@
  */
 package org.apache.iotdb.db.engine.storagegroup;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.concurrent.IoTDBThreadPoolFactory;
 import org.apache.iotdb.db.concurrent.ThreadName;
 import org.apache.iotdb.db.conf.IoTDBConfig;
@@ -76,7 +77,6 @@ import org.apache.iotdb.db.service.metrics.Tag;
 import org.apache.iotdb.db.tools.settle.TsFileAndModSettleTool;
 import org.apache.iotdb.db.utils.CopyOnReadLinkedList;
 import org.apache.iotdb.db.utils.MmapUtil;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.db.utils.UpgradeUtils;
 import org.apache.iotdb.db.writelog.recover.TsFileRecoverPerformer;
 import org.apache.iotdb.metrics.config.MetricConfigDescriptor;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/trigger/executor/TriggerExecutor.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/trigger/executor/TriggerExecutor.java
index ebb523d..513e813 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/trigger/executor/TriggerExecutor.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/trigger/executor/TriggerExecutor.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.db.engine.trigger.executor;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.engine.trigger.api.Trigger;
 import org.apache.iotdb.db.engine.trigger.api.TriggerAttributes;
 import org.apache.iotdb.db.engine.trigger.service.TriggerClassLoader;
@@ -26,7 +27,6 @@ import 
org.apache.iotdb.db.engine.trigger.service.TriggerRegistrationInformation
 import org.apache.iotdb.db.exception.TriggerExecutionException;
 import org.apache.iotdb.db.exception.TriggerManagementException;
 import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.utils.Binary;
 
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/trigger/service/TriggerRegistrationService.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/trigger/service/TriggerRegistrationService.java
index 5973fce..2fb508c 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/trigger/service/TriggerRegistrationService.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/trigger/service/TriggerRegistrationService.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.db.engine.trigger.service;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.engine.fileSystem.SystemFileFactory;
@@ -41,7 +42,6 @@ import org.apache.iotdb.db.query.dataset.ListDataSet;
 import org.apache.iotdb.db.service.IService;
 import org.apache.iotdb.db.service.IoTDB;
 import org.apache.iotdb.db.service.ServiceType;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.fileSystem.FSFactoryProducer;
 import org.apache.iotdb.tsfile.read.common.RowRecord;
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java 
b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
index 12b7366..f3f1101 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
@@ -18,6 +18,7 @@
  */
 package org.apache.iotdb.db.metadata;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.concurrent.IoTDBThreadPoolFactory;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBConstant;
@@ -71,7 +72,6 @@ import org.apache.iotdb.db.rescon.MemTableManager;
 import org.apache.iotdb.db.service.metrics.Metric;
 import org.apache.iotdb.db.service.metrics.MetricsService;
 import org.apache.iotdb.db.service.metrics.Tag;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.metrics.config.MetricConfigDescriptor;
 import org.apache.iotdb.metrics.utils.MetricLevel;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/idtable/AppendOnlyDiskSchemaManager.java
 
b/server/src/main/java/org/apache/iotdb/db/metadata/idtable/AppendOnlyDiskSchemaManager.java
index 1f116c3..a87db0d 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/metadata/idtable/AppendOnlyDiskSchemaManager.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/metadata/idtable/AppendOnlyDiskSchemaManager.java
@@ -19,10 +19,10 @@
 
 package org.apache.iotdb.db.metadata.idtable;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.exception.metadata.MetadataException;
 import org.apache.iotdb.db.metadata.idtable.entry.DiskSchemaEntry;
 import org.apache.iotdb.db.metadata.idtable.entry.SchemaEntry;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/idtable/IDTable.java 
b/server/src/main/java/org/apache/iotdb/db/metadata/idtable/IDTable.java
index 4c32feb..b2337fe 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/idtable/IDTable.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/idtable/IDTable.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.db.metadata.idtable;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.exception.metadata.MetadataException;
@@ -34,7 +35,6 @@ import org.apache.iotdb.db.metadata.path.PartialPath;
 import org.apache.iotdb.db.qp.physical.crud.InsertPlan;
 import org.apache.iotdb.db.qp.physical.sys.CreateAlignedTimeSeriesPlan;
 import org.apache.iotdb.db.qp.physical.sys.CreateTimeSeriesPlan;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.tsfile.read.TimeValuePair;
 import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema;
 
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/idtable/IDTableHashmapImpl.java
 
b/server/src/main/java/org/apache/iotdb/db/metadata/idtable/IDTableHashmapImpl.java
index fb7732c..6a0eb06 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/metadata/idtable/IDTableHashmapImpl.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/metadata/idtable/IDTableHashmapImpl.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.db.metadata.idtable;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.exception.metadata.DataTypeMismatchException;
@@ -37,7 +38,6 @@ import org.apache.iotdb.db.qp.physical.crud.InsertTabletPlan;
 import org.apache.iotdb.db.qp.physical.sys.CreateAlignedTimeSeriesPlan;
 import org.apache.iotdb.db.qp.physical.sys.CreateTimeSeriesPlan;
 import org.apache.iotdb.db.service.IoTDB;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.db.utils.TypeInferenceUtils;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.TimeValuePair;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/idtable/IDiskSchemaManager.java
 
b/server/src/main/java/org/apache/iotdb/db/metadata/idtable/IDiskSchemaManager.java
index 100fb1c..a2f15d6 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/metadata/idtable/IDiskSchemaManager.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/metadata/idtable/IDiskSchemaManager.java
@@ -18,8 +18,8 @@
  */
 package org.apache.iotdb.db.metadata.idtable;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.metadata.idtable.entry.DiskSchemaEntry;
-import org.apache.iotdb.db.utils.TestOnly;
 
 import java.io.IOException;
 import java.util.Collection;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/idtable/entry/DeviceEntry.java
 
b/server/src/main/java/org/apache/iotdb/db/metadata/idtable/entry/DeviceEntry.java
index e5cbd90..5a1d0c6 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/metadata/idtable/entry/DeviceEntry.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/metadata/idtable/entry/DeviceEntry.java
@@ -19,7 +19,7 @@
 
 package org.apache.iotdb.db.metadata.idtable.entry;
 
-import org.apache.iotdb.db.utils.TestOnly;
+import org.apache.iotdb.commons.utils.TestOnly;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/idtable/entry/DeviceIDFactory.java
 
b/server/src/main/java/org/apache/iotdb/db/metadata/idtable/entry/DeviceIDFactory.java
index 6ebee8f..6e5e810 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/metadata/idtable/entry/DeviceIDFactory.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/metadata/idtable/entry/DeviceIDFactory.java
@@ -19,9 +19,9 @@
 
 package org.apache.iotdb.db.metadata.idtable.entry;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.metadata.path.PartialPath;
-import org.apache.iotdb.db.utils.TestOnly;
 
 import java.util.function.Function;
 
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/idtable/entry/SchemaEntry.java
 
b/server/src/main/java/org/apache/iotdb/db/metadata/idtable/entry/SchemaEntry.java
index 77a07e1..cb34fbc 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/metadata/idtable/entry/SchemaEntry.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/metadata/idtable/entry/SchemaEntry.java
@@ -19,12 +19,12 @@
 
 package org.apache.iotdb.db.metadata.idtable.entry;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.metadata.idtable.IDiskSchemaManager;
 import org.apache.iotdb.db.metadata.lastCache.container.ILastCacheContainer;
 import org.apache.iotdb.db.metadata.path.PartialPath;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/path/AlignedPath.java 
b/server/src/main/java/org/apache/iotdb/db/metadata/path/AlignedPath.java
index 9ae5b7d..a9966e2 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/path/AlignedPath.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/path/AlignedPath.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.db.metadata.path;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.engine.memtable.AlignedWritableMemChunk;
 import org.apache.iotdb.db.engine.memtable.AlignedWritableMemChunkGroup;
 import org.apache.iotdb.db.engine.memtable.IMemTable;
@@ -39,7 +40,6 @@ import 
org.apache.iotdb.db.query.executor.fill.AlignedLastPointReader;
 import org.apache.iotdb.db.query.filter.TsFileFilter;
 import org.apache.iotdb.db.query.reader.series.AlignedSeriesReader;
 import org.apache.iotdb.db.utils.QueryUtils;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.db.utils.datastructure.TVList;
 import org.apache.iotdb.tsfile.file.metadata.AlignedChunkMetadata;
 import org.apache.iotdb.tsfile.file.metadata.AlignedTimeSeriesMetadata;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/path/MeasurementPath.java 
b/server/src/main/java/org/apache/iotdb/db/metadata/path/MeasurementPath.java
index 7013cf7..725d731 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/metadata/path/MeasurementPath.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/metadata/path/MeasurementPath.java
@@ -18,6 +18,7 @@
  */
 package org.apache.iotdb.db.metadata.path;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBConstant;
 import org.apache.iotdb.db.engine.memtable.IMemTable;
 import org.apache.iotdb.db.engine.memtable.IWritableMemChunk;
@@ -37,7 +38,6 @@ import 
org.apache.iotdb.db.query.executor.fill.LastPointReader;
 import org.apache.iotdb.db.query.filter.TsFileFilter;
 import org.apache.iotdb.db.query.reader.series.SeriesReader;
 import org.apache.iotdb.db.utils.QueryUtils;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.db.utils.datastructure.TVList;
 import org.apache.iotdb.tsfile.file.metadata.IChunkMetadata;
 import org.apache.iotdb.tsfile.file.metadata.ITimeSeriesMetadata;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/path/PartialPath.java 
b/server/src/main/java/org/apache/iotdb/db/metadata/path/PartialPath.java
index b55cacd..04f041a 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/path/PartialPath.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/path/PartialPath.java
@@ -18,6 +18,7 @@
  */
 package org.apache.iotdb.db.metadata.path;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.engine.memtable.IMemTable;
 import org.apache.iotdb.db.engine.modification.Modification;
 import org.apache.iotdb.db.engine.querycontext.QueryDataSource;
@@ -31,7 +32,6 @@ import org.apache.iotdb.db.query.context.QueryContext;
 import org.apache.iotdb.db.query.executor.fill.LastPointReader;
 import org.apache.iotdb.db.query.filter.TsFileFilter;
 import org.apache.iotdb.db.query.reader.series.SeriesReader;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.tsfile.common.constant.TsFileConstant;
 import org.apache.iotdb.tsfile.file.metadata.IChunkMetadata;
 import org.apache.iotdb.tsfile.file.metadata.ITimeSeriesMetadata;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/storagegroup/StorageGroupSchemaManager.java
 
b/server/src/main/java/org/apache/iotdb/db/metadata/storagegroup/StorageGroupSchemaManager.java
index 9a06543..fd9928e 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/metadata/storagegroup/StorageGroupSchemaManager.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/metadata/storagegroup/StorageGroupSchemaManager.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.db.metadata.storagegroup;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.exception.metadata.MetadataException;
 import org.apache.iotdb.db.exception.metadata.StorageGroupNotSetException;
@@ -26,7 +27,6 @@ import org.apache.iotdb.db.metadata.MManager;
 import org.apache.iotdb.db.metadata.mnode.IStorageGroupMNode;
 import org.apache.iotdb.db.metadata.mtree.MTreeAboveSG;
 import org.apache.iotdb.db.metadata.path.PartialPath;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.tsfile.utils.Pair;
 
 import org.slf4j.Logger;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/template/TemplateManager.java
 
b/server/src/main/java/org/apache/iotdb/db/metadata/template/TemplateManager.java
index 9cbd6e7..9b6e77d 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/metadata/template/TemplateManager.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/metadata/template/TemplateManager.java
@@ -18,6 +18,7 @@
  */
 package org.apache.iotdb.db.metadata.template;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBConstant;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.exception.metadata.DuplicatedTemplateException;
@@ -34,7 +35,6 @@ import org.apache.iotdb.db.qp.physical.sys.CreateTemplatePlan;
 import org.apache.iotdb.db.qp.physical.sys.DropTemplatePlan;
 import org.apache.iotdb.db.qp.physical.sys.PruneTemplatePlan;
 import org.apache.iotdb.db.utils.SchemaUtils;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/utils/MetaUtils.java 
b/server/src/main/java/org/apache/iotdb/db/metadata/utils/MetaUtils.java
index 9b2ae8b..959d0df 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/utils/MetaUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/utils/MetaUtils.java
@@ -18,6 +18,7 @@
  */
 package org.apache.iotdb.db.metadata.utils;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBConstant;
 import org.apache.iotdb.db.exception.metadata.IllegalPathException;
 import org.apache.iotdb.db.exception.metadata.MetadataException;
@@ -25,7 +26,6 @@ import org.apache.iotdb.db.metadata.mnode.IMNode;
 import org.apache.iotdb.db.metadata.path.AlignedPath;
 import org.apache.iotdb.db.metadata.path.MeasurementPath;
 import org.apache.iotdb.db.metadata.path.PartialPath;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.tsfile.read.common.Path;
 
 import java.util.ArrayList;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/node/PlanNodeId.java 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/node/PlanNodeId.java
index 576fd64..e5a69e9 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/node/PlanNodeId.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/node/PlanNodeId.java
@@ -1,19 +1,21 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.iotdb.db.mpp.plan.node;
 
 public class PlanNodeId {
diff --git 
a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertRowPlan.java 
b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertRowPlan.java
index ee263cc..425a411 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertRowPlan.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertRowPlan.java
@@ -18,6 +18,7 @@
  */
 package org.apache.iotdb.db.qp.physical.crud;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBConstant;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.exception.metadata.IllegalPathException;
@@ -29,7 +30,6 @@ import org.apache.iotdb.db.metadata.path.PartialPath;
 import org.apache.iotdb.db.qp.logical.Operator;
 import org.apache.iotdb.db.qp.logical.Operator.OperatorType;
 import org.apache.iotdb.db.utils.CommonUtils;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.iotdb.tsfile.read.TimeValuePair;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateTemplatePlan.java
 
b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateTemplatePlan.java
index b05030b..9aaf9bd 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateTemplatePlan.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateTemplatePlan.java
@@ -19,11 +19,11 @@
 
 package org.apache.iotdb.db.qp.physical.sys;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.exception.metadata.MetadataException;
 import org.apache.iotdb.db.metadata.path.PartialPath;
 import org.apache.iotdb.db.qp.logical.Operator.OperatorType;
 import org.apache.iotdb.db.qp.physical.PhysicalPlan;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.tsfile.common.constant.TsFileConstant;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java 
b/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java
index 340bc32..e5cb335 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java
@@ -18,6 +18,7 @@
  */
 package org.apache.iotdb.db.qp.strategy;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBConstant;
 import org.apache.iotdb.db.exception.metadata.IllegalPathException;
 import org.apache.iotdb.db.metadata.path.PartialPath;
@@ -35,7 +36,6 @@ import org.apache.iotdb.db.qp.sql.IoTDBSqlVisitor;
 import org.apache.iotdb.db.qp.sql.SqlLexer;
 import org.apache.iotdb.db.query.expression.ResultColumn;
 import org.apache.iotdb.db.query.expression.unary.TimeSeriesOperand;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.service.rpc.thrift.TSLastDataQueryReq;
 import org.apache.iotdb.service.rpc.thrift.TSRawDataQueryReq;
 
diff --git 
a/server/src/main/java/org/apache/iotdb/db/qp/utils/DatetimeUtils.java 
b/server/src/main/java/org/apache/iotdb/db/qp/utils/DatetimeUtils.java
index 5f92310..fb46eb5 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/utils/DatetimeUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/utils/DatetimeUtils.java
@@ -18,10 +18,10 @@
  */
 package org.apache.iotdb.db.qp.utils;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.exception.query.LogicalOperatorException;
 import org.apache.iotdb.db.query.control.SessionManager;
-import org.apache.iotdb.db.utils.TestOnly;
 
 import java.time.DateTimeException;
 import java.time.Instant;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByTimeDataSet.java
 
b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByTimeDataSet.java
index 4508746..8c269f7 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByTimeDataSet.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByTimeDataSet.java
@@ -18,12 +18,12 @@
  */
 package org.apache.iotdb.db.query.dataset.groupby;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.qp.physical.crud.GroupByTimeFillPlan;
 import org.apache.iotdb.db.qp.physical.crud.GroupByTimePlan;
 import org.apache.iotdb.db.query.aggregation.AggregateResult;
 import org.apache.iotdb.db.query.context.QueryContext;
 import org.apache.iotdb.db.query.executor.groupby.SlidingWindowGroupByExecutor;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.db.utils.timerangeiterator.ITimeRangeIterator;
 import org.apache.iotdb.db.utils.timerangeiterator.TimeRangeIteratorFactory;
 import org.apache.iotdb.tsfile.read.common.RowRecord;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByWithValueFilterDataSet.java
 
b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByWithValueFilterDataSet.java
index 1f50e12..8b0409e 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByWithValueFilterDataSet.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByWithValueFilterDataSet.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.db.query.dataset.groupby;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.engine.StorageEngine;
 import org.apache.iotdb.db.engine.storagegroup.VirtualStorageGroupProcessor;
@@ -40,7 +41,6 @@ import 
org.apache.iotdb.db.query.reader.series.IReaderByTimestamp;
 import org.apache.iotdb.db.query.reader.series.SeriesReaderByTimestamp;
 import org.apache.iotdb.db.query.timegenerator.ServerTimeGenerator;
 import org.apache.iotdb.db.utils.QueryUtils;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.db.utils.ValueIterator;
 import org.apache.iotdb.tsfile.read.filter.TimeFilter;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/reader/series/AlignedSeriesReader.java
 
b/server/src/main/java/org/apache/iotdb/db/query/reader/series/AlignedSeriesReader.java
index cb5c656..6b31492 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/reader/series/AlignedSeriesReader.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/reader/series/AlignedSeriesReader.java
@@ -18,6 +18,7 @@
  */
 package org.apache.iotdb.db.query.reader.series;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.engine.querycontext.QueryDataSource;
 import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
 import org.apache.iotdb.db.metadata.path.AlignedPath;
@@ -29,7 +30,6 @@ import 
org.apache.iotdb.db.query.reader.universal.AlignedPriorityMergeReader;
 import org.apache.iotdb.db.query.reader.universal.DescPriorityMergeReader;
 import org.apache.iotdb.db.query.reader.universal.PriorityMergeReader;
 import org.apache.iotdb.db.utils.FileLoaderUtils;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.tsfile.file.metadata.AlignedTimeSeriesMetadata;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesAggregateReader.java
 
b/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesAggregateReader.java
index 3dfa18e..2371b96 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesAggregateReader.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesAggregateReader.java
@@ -18,12 +18,12 @@
  */
 package org.apache.iotdb.db.query.reader.series;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.engine.querycontext.QueryDataSource;
 import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
 import org.apache.iotdb.db.metadata.path.PartialPath;
 import org.apache.iotdb.db.query.context.QueryContext;
 import org.apache.iotdb.db.query.filter.TsFileFilter;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
 import org.apache.iotdb.tsfile.read.common.BatchData;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesRawDataBatchReader.java
 
b/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesRawDataBatchReader.java
index ca3aab0..b0b9d20 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesRawDataBatchReader.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesRawDataBatchReader.java
@@ -18,12 +18,12 @@
  */
 package org.apache.iotdb.db.query.reader.series;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.engine.querycontext.QueryDataSource;
 import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
 import org.apache.iotdb.db.metadata.path.PartialPath;
 import org.apache.iotdb.db.query.context.QueryContext;
 import org.apache.iotdb.db.query.filter.TsFileFilter;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.BatchData;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReader.java
 
b/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReader.java
index 615c685..c9c49c5 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReader.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReader.java
@@ -18,6 +18,7 @@
  */
 package org.apache.iotdb.db.query.reader.series;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.engine.querycontext.QueryDataSource;
 import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
 import org.apache.iotdb.db.metadata.idtable.IDTable;
@@ -31,7 +32,6 @@ import 
org.apache.iotdb.db.query.reader.universal.PriorityMergeReader;
 import 
org.apache.iotdb.db.query.reader.universal.PriorityMergeReader.MergeReaderPriority;
 import org.apache.iotdb.db.utils.FileLoaderUtils;
 import org.apache.iotdb.db.utils.QueryUtils;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.tsfile.file.metadata.AlignedChunkMetadata;
 import org.apache.iotdb.tsfile.file.metadata.AlignedTimeSeriesMetadata;
 import org.apache.iotdb.tsfile.file.metadata.IChunkMetadata;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReaderByTimestamp.java
 
b/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReaderByTimestamp.java
index 7a5a2c2..f9e12eb 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReaderByTimestamp.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReaderByTimestamp.java
@@ -18,12 +18,12 @@
  */
 package org.apache.iotdb.db.query.reader.series;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.engine.querycontext.QueryDataSource;
 import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
 import org.apache.iotdb.db.metadata.path.PartialPath;
 import org.apache.iotdb.db.query.context.QueryContext;
 import org.apache.iotdb.db.query.filter.TsFileFilter;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
 import org.apache.iotdb.tsfile.read.common.BatchData;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/udf/service/UDFRegistrationService.java
 
b/server/src/main/java/org/apache/iotdb/db/query/udf/service/UDFRegistrationService.java
index b7c79e3..a743be5 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/udf/service/UDFRegistrationService.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/udf/service/UDFRegistrationService.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.db.query.udf.service;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.engine.fileSystem.SystemFileFactory;
 import org.apache.iotdb.db.exception.StartupException;
@@ -30,7 +31,6 @@ import org.apache.iotdb.db.query.udf.api.UDF;
 import org.apache.iotdb.db.query.udf.builtin.BuiltinFunction;
 import org.apache.iotdb.db.service.IService;
 import org.apache.iotdb.db.service.ServiceType;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.tsfile.fileSystem.FSFactoryProducer;
 
 import org.apache.commons.io.FileUtils;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/rescon/TsFileResourceManager.java 
b/server/src/main/java/org/apache/iotdb/db/rescon/TsFileResourceManager.java
index a52b241..ae6ab41 100644
--- a/server/src/main/java/org/apache/iotdb/db/rescon/TsFileResourceManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/rescon/TsFileResourceManager.java
@@ -18,11 +18,11 @@
  */
 package org.apache.iotdb.db.rescon;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
 import org.apache.iotdb.db.engine.storagegroup.timeindex.TimeIndexLevel;
-import org.apache.iotdb.db.utils.TestOnly;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/service/RegisterManager.java 
b/server/src/main/java/org/apache/iotdb/db/service/RegisterManager.java
index 4876d0f..e096d3e 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/RegisterManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/RegisterManager.java
@@ -18,9 +18,9 @@
  */
 package org.apache.iotdb.db.service;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.exception.ShutdownException;
 import org.apache.iotdb.db.exception.StartupException;
-import org.apache.iotdb.db.utils.TestOnly;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/CommonUtils.java 
b/server/src/main/java/org/apache/iotdb/db/utils/CommonUtils.java
index 5617d75..3fd2799 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/CommonUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/CommonUtils.java
@@ -18,6 +18,7 @@
  */
 package org.apache.iotdb.db.utils;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.qp.constant.SQLConstant;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java
 
b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java
index c91348f..cfdde1e 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java
@@ -19,9 +19,9 @@
 
 package org.apache.iotdb.db.utils.datastructure;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.rescon.PrimitiveArrayManager;
 import org.apache.iotdb.db.utils.MathUtils;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.iotdb.tsfile.read.TimeValuePair;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/TVList.java 
b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/TVList.java
index 1f9c1e7..550bc33 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/TVList.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/TVList.java
@@ -19,8 +19,8 @@
 
 package org.apache.iotdb.db.utils.datastructure;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.rescon.PrimitiveArrayManager;
-import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.iotdb.tsfile.read.TimeValuePair;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/utils/windowing/window/EvictableBatchList.java
 
b/server/src/main/java/org/apache/iotdb/db/utils/windowing/window/EvictableBatchList.java
index 7129708..bc6641c 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/utils/windowing/window/EvictableBatchList.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/utils/windowing/window/EvictableBatchList.java
@@ -19,7 +19,7 @@
 
 package org.apache.iotdb.db.utils.windowing.window;
 
-import org.apache.iotdb.db.utils.TestOnly;
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.BatchData;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/writelog/io/LogWriter.java 
b/server/src/main/java/org/apache/iotdb/db/writelog/io/LogWriter.java
index 1f19f8d..c648192 100644
--- a/server/src/main/java/org/apache/iotdb/db/writelog/io/LogWriter.java
+++ b/server/src/main/java/org/apache/iotdb/db/writelog/io/LogWriter.java
@@ -18,8 +18,8 @@
  */
 package org.apache.iotdb.db.writelog.io;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.engine.fileSystem.SystemFileFactory;
-import org.apache.iotdb.db.utils.TestOnly;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/thrift-confignode/pom.xml b/thrift-confignode/pom.xml
index c6e591c..a3501f8 100644
--- a/thrift-confignode/pom.xml
+++ b/thrift-confignode/pom.xml
@@ -28,7 +28,7 @@
         <relativePath>../pom.xml</relativePath>
     </parent>
     <artifactId>iotdb-thrift-confignode</artifactId>
-    <name>ConfigNode RPC thrift</name>
+    <name>rpc-thrift-confignode</name>
     <description>RPC (Thrift) framework among ConfigNodes.</description>
     <dependencies>
         <dependency>

Reply via email to