temp save
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 3d53d51..89ce46e 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
@@ -19,22 +19,6 @@
 
 package org.apache.iotdb.cluster.log;
 
-import static org.apache.iotdb.cluster.server.monitor.Timer.Statistic.LOG_DISPATCHER_LOG_ENQUEUE_SINGLE;
-
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.concurrent.ArrayBlockingQueue;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicInteger;
 import org.apache.iotdb.cluster.config.ClusterConfig;
 import org.apache.iotdb.cluster.config.ClusterDescriptor;
 import org.apache.iotdb.cluster.rpc.thrift.AppendEntriesRequest;
@@ -57,11 +41,30 @@
 import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.tsfile.utils.Pair;
+
 import org.apache.thrift.TException;
 import org.apache.thrift.async.AsyncMethodCallback;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import static org.apache.iotdb.cluster.server.monitor.Timer.Statistic.DISPATCHER_QUEUE_LENGTH;
+import static org.apache.iotdb.cluster.server.monitor.Timer.Statistic.LOG_DISPATCHER_LOG_ENQUEUE_SINGLE;
+
 /**
  * A LogDispatcher serves a raft leader by queuing logs that the leader wants to send to its
  * followers and send the logs in an ordered manner so that the followers will not wait for previous
@@ -78,6 +81,8 @@
   protected List<Pair<Node, BlockingQueue<SendLogRequest>>> nodesLogQueuesList = new ArrayList<>();
   protected Map<Node, Boolean> nodesEnabled;
   protected Map<Node, ExecutorService> executorServices = new HashMap<>();
+  protected ExecutorService resultHandlerThread =
+      IoTDBThreadPoolFactory.newFixedThreadPool(2, "AppendResultHandler");
   protected boolean queueOrdered =
       !(clusterConfig.isUseFollowerSlidingWindow() && clusterConfig.isEnableWeakAcceptance());
 
@@ -124,6 +129,7 @@
         logger.warn("Cannot shut down dispatcher pool of {}-{}", member.getName(), entry.getKey());
       }
     }
+    resultHandlerThread.shutdownNow();
   }
 
   protected SendLogRequest transformRequest(Node node, SendLogRequest request) {
@@ -284,6 +290,7 @@
         while (!Thread.interrupted()) {
           synchronized (logBlockingDeque) {
             SendLogRequest poll = logBlockingDeque.take();
+            DISPATCHER_QUEUE_LENGTH.add(logBlockingDeque.size() + 1);
             currBatch.add(poll);
             if (maxBatchSize > 1 && useBatchInLogCatchUp) {
               while (!logBlockingDeque.isEmpty() && currBatch.size() < maxBatchSize) {
@@ -436,6 +443,12 @@
       }
     }
 
+    protected void handleAppendResult(AppendNodeEntryHandler handler, AppendEntryResult result) {
+      long handleStart = Statistic.RAFT_SENDER_HANDLE_SEND_RESULT.getOperationStartTime();
+      handler.onComplete(result);
+      Statistic.RAFT_SENDER_HANDLE_SEND_RESULT.calOperationCostTimeFromStart(handleStart);
+    }
+
     void sendLogSync(SendLogRequest logRequest) {
       AppendNodeEntryHandler handler =
           member.getAppendNodeEntryHandler(
@@ -446,15 +459,18 @@
       try {
         long operationStartTime = Statistic.RAFT_SENDER_SEND_LOG.getOperationStartTime();
         for (int i = 0; i < retries; i++) {
-          int concurrentSender = concurrentSenderNum.incrementAndGet();
-          Statistic.RAFT_CONCURRENT_SENDER.add(concurrentSender);
           Client client = getSyncClient();
           if (client == null) {
             continue;
           }
           AppendEntryResult result;
+          int concurrentSender = concurrentSenderNum.incrementAndGet();
+          Statistic.RAFT_CONCURRENT_SENDER.add(concurrentSender);
           result = client.appendEntry(logRequest.appendEntryRequest, logRequest.isVerifier);
+          Timer.Statistic.LOG_DISPATCHER_FROM_CREATE_TO_SENT.calOperationCostTimeFromStart(
+              logRequest.getVotingLog().getLog().getCreateTime());
           concurrentSenderNum.decrementAndGet();
+
           if (result.status == Response.RESPONSE_OUT_OF_WINDOW) {
             Thread.sleep(100);
             Statistic.RAFT_SENDER_OOW.add(1);
@@ -466,9 +482,7 @@
             nodeStatus.getSendEntryNum().incrementAndGet();
             nodeStatus.getSendEntryLatencyStatistic().add(sendLogTime);
 
-            long handleStart = Statistic.RAFT_SENDER_HANDLE_SEND_RESULT.getOperationStartTime();
-            handler.onComplete(result);
-            Statistic.RAFT_SENDER_HANDLE_SEND_RESULT.calOperationCostTimeFromStart(handleStart);
+            resultHandlerThread.submit(() -> handleAppendResult(handler, result));
             break;
           }
         }
@@ -510,8 +524,6 @@
       } else {
         sendLogSync(logRequest);
       }
-      Timer.Statistic.LOG_DISPATCHER_FROM_CREATE_TO_SENT.calOperationCostTimeFromStart(
-          logRequest.getVotingLog().getLog().getCreateTime());
     }
 
     public Client getSyncClient() {
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/log/LogParser.java b/cluster/src/main/java/org/apache/iotdb/cluster/log/LogParser.java
index e5f33a0..87cdc15 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/log/LogParser.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/log/LogParser.java
@@ -20,11 +20,11 @@
 package org.apache.iotdb.cluster.log;
 
 import org.apache.iotdb.cluster.exception.UnknownLogTypeException;
+import org.apache.iotdb.cluster.expr.craft.FragmentedLog;
 import org.apache.iotdb.cluster.log.Log.Types;
 import org.apache.iotdb.cluster.log.logtypes.AddNodeLog;
 import org.apache.iotdb.cluster.log.logtypes.CloseFileLog;
 import org.apache.iotdb.cluster.log.logtypes.EmptyContentLog;
-import org.apache.iotdb.cluster.expr.craft.FragmentedLog;
 import org.apache.iotdb.cluster.log.logtypes.LargeTestLog;
 import org.apache.iotdb.cluster.log.logtypes.RemoveNodeLog;
 import org.apache.iotdb.cluster.log.logtypes.RequestLog;
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/log/VotingLog.java b/cluster/src/main/java/org/apache/iotdb/cluster/log/VotingLog.java
index 7e9eee9..21816f1 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/log/VotingLog.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/log/VotingLog.java
@@ -19,10 +19,11 @@
 
 package org.apache.iotdb.cluster.log;
 
+import org.apache.iotdb.cluster.config.ClusterDescriptor;
+
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
-import java.util.concurrent.atomic.AtomicLong;
-import org.apache.iotdb.cluster.config.ClusterDescriptor;
 
 public class VotingLog {
   protected Log log;
@@ -60,7 +61,7 @@
   }
 
   public Set<Integer> getWeaklyAcceptedNodeIds() {
-    return weaklyAcceptedNodeIds;
+    return weaklyAcceptedNodeIds != null ? weaklyAcceptedNodeIds : Collections.emptySet();
   }
 
   @Override
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/log/VotingLogList.java b/cluster/src/main/java/org/apache/iotdb/cluster/log/VotingLogList.java
index d1b410f..96bc390 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/log/VotingLogList.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/log/VotingLogList.java
@@ -51,20 +51,20 @@
   public VotingLogList(int quorumSize, RaftMember member) {
     this.quorumSize = quorumSize;
     this.member = member;
-    service.submit(
-        () -> {
-          try {
-            while (true) {
-              if (!tryCommit()) {
-                synchronized (newCommitIndex) {
-                  newCommitIndex.wait(1);
-                }
-              }
-            }
-          } catch (Exception e) {
-            logger.error("Unexpected exception when updating commit index", e);
-          }
-        });
+    //    service.submit(
+    //        () -> {
+    //          try {
+    //            while (true) {
+    //              if (!tryCommit()) {
+    //                synchronized (newCommitIndex) {
+    //                  newCommitIndex.wait(1);
+    //                }
+    //              }
+    //            }
+    //          } catch (Exception e) {
+    //            logger.error("Unexpected exception when updating commit index", e);
+    //          }
+    //        });
   }
 
   private boolean tryCommit() {
@@ -123,9 +123,7 @@
               }
             });
     if (newIndex == index) {
-      synchronized (newCommitIndex) {
-        newCommitIndex.notifyAll();
-      }
+      tryCommit();
     }
   }
 
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/log/appender/BlockingLogAppender.java b/cluster/src/main/java/org/apache/iotdb/cluster/log/appender/BlockingLogAppender.java
index ffae4cc..62068e6 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/log/appender/BlockingLogAppender.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/log/appender/BlockingLogAppender.java
@@ -120,8 +120,7 @@
     long alreadyWait = 0;
     Object logUpdateCondition = logManager.getLogUpdateCondition(prevLogIndex);
     long lastLogIndex = logManager.getLastLogIndex();
-    Timer.Statistic.RAFT_RECEIVER_INDEX_DIFF.add(prevLogIndex - lastLogIndex);
-    long waitTime = 10;
+    long waitTime = 1;
     while (lastLogIndex < prevLogIndex
         && alreadyWait <= ClusterConstant.getWriteOperationTimeoutMS()) {
       try {
@@ -147,6 +146,7 @@
   protected long checkPrevLogIndex(long prevLogIndex) {
     long lastLogIndex = logManager.getLastLogIndex();
     long startTime = Timer.Statistic.RAFT_RECEIVER_WAIT_FOR_PREV_LOG.getOperationStartTime();
+    Timer.Statistic.RAFT_RECEIVER_INDEX_DIFF.add(prevLogIndex - lastLogIndex);
     if (lastLogIndex < prevLogIndex && !waitForPrevLog(prevLogIndex)) {
       // there are logs missing between the incoming log and the local last log, and such logs
       // did not come within a timeout, report a mismatch to the sender and it shall fix this
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/log/applier/AsyncDataLogApplier.java b/cluster/src/main/java/org/apache/iotdb/cluster/log/applier/AsyncDataLogApplier.java
index a3ca651..e45cb1c 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/log/applier/AsyncDataLogApplier.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/log/applier/AsyncDataLogApplier.java
@@ -20,10 +20,10 @@
 package org.apache.iotdb.cluster.log.applier;
 
 import org.apache.iotdb.cluster.config.ClusterDescriptor;
+import org.apache.iotdb.cluster.expr.craft.FragmentedLog;
 import org.apache.iotdb.cluster.log.Log;
 import org.apache.iotdb.cluster.log.LogApplier;
 import org.apache.iotdb.cluster.log.logtypes.CloseFileLog;
-import org.apache.iotdb.cluster.expr.craft.FragmentedLog;
 import org.apache.iotdb.cluster.log.logtypes.RequestLog;
 import org.apache.iotdb.cluster.server.monitor.Timer;
 import org.apache.iotdb.cluster.server.monitor.Timer.Statistic;
@@ -35,6 +35,7 @@
 import org.apache.iotdb.db.qp.physical.crud.InsertPlan;
 import org.apache.iotdb.db.qp.physical.crud.InsertRowsPlan;
 import org.apache.iotdb.db.qp.physical.sys.CreateTimeSeriesPlan;
+import org.apache.iotdb.db.qp.physical.sys.DummyPlan;
 import org.apache.iotdb.db.service.IoTDB;
 
 import org.slf4j.Logger;
@@ -42,6 +43,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Random;
 import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.ExecutionException;
@@ -60,6 +62,7 @@
   private Map<PartialPath, DataLogConsumer> consumerMap;
   private ExecutorService consumerPool;
   private String name;
+  private Random random = new Random();
 
   // a plan that affects multiple sgs should wait until all consumers become empty to assure all
   // previous logs are applied, such a plan will wait on this condition if it finds any
@@ -168,6 +171,8 @@
     } else if (plan instanceof CreateTimeSeriesPlan) {
       PartialPath path = ((CreateTimeSeriesPlan) plan).getPath();
       sgPath = IoTDB.schemaProcessor.getBelongedStorageGroup(path);
+    } else if (plan instanceof DummyPlan) {
+      sgPath = new PartialPath(Integer.toString(random.nextInt(CONCURRENT_CONSUMER_NUM)), false);
     }
     return sgPath;
   }
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/log/applier/DataLogApplier.java b/cluster/src/main/java/org/apache/iotdb/cluster/log/applier/DataLogApplier.java
index 2378492..6cebaa7 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/log/applier/DataLogApplier.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/log/applier/DataLogApplier.java
@@ -20,10 +20,10 @@
 package org.apache.iotdb.cluster.log.applier;
 
 import org.apache.iotdb.cluster.ClusterIoTDB;
+import org.apache.iotdb.cluster.expr.craft.FragmentedLog;
 import org.apache.iotdb.cluster.log.Log;
 import org.apache.iotdb.cluster.log.logtypes.AddNodeLog;
 import org.apache.iotdb.cluster.log.logtypes.CloseFileLog;
-import org.apache.iotdb.cluster.expr.craft.FragmentedLog;
 import org.apache.iotdb.cluster.log.logtypes.RemoveNodeLog;
 import org.apache.iotdb.cluster.log.logtypes.RequestLog;
 import org.apache.iotdb.cluster.server.member.DataGroupMember;
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/log/applier/MetaLogApplier.java b/cluster/src/main/java/org/apache/iotdb/cluster/log/applier/MetaLogApplier.java
index 488f63c..fabcefb 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/log/applier/MetaLogApplier.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/log/applier/MetaLogApplier.java
@@ -20,10 +20,10 @@
 package org.apache.iotdb.cluster.log.applier;
 
 import org.apache.iotdb.cluster.exception.ChangeMembershipException;
+import org.apache.iotdb.cluster.expr.craft.FragmentedLog;
 import org.apache.iotdb.cluster.log.Log;
 import org.apache.iotdb.cluster.log.logtypes.AddNodeLog;
 import org.apache.iotdb.cluster.log.logtypes.EmptyContentLog;
-import org.apache.iotdb.cluster.expr.craft.FragmentedLog;
 import org.apache.iotdb.cluster.log.logtypes.RemoveNodeLog;
 import org.apache.iotdb.cluster.log.logtypes.RequestLog;
 import org.apache.iotdb.cluster.server.NodeCharacter;
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 46f4251..730e2e2 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
@@ -19,8 +19,6 @@
 
 package org.apache.iotdb.cluster.log.manage;
 
-import static org.apache.iotdb.cluster.server.monitor.Timer.Statistic.RAFT_COMMIT_LOG_IN_MANAGER;
-
 import org.apache.iotdb.cluster.config.ClusterDescriptor;
 import org.apache.iotdb.cluster.exception.EntryCompactedException;
 import org.apache.iotdb.cluster.exception.EntryUnavailableException;
@@ -38,8 +36,8 @@
 import org.apache.iotdb.commons.concurrent.threadpool.ScheduledExecutorUtil;
 import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.consensus.IStateMachine;
-
 import org.apache.iotdb.tsfile.utils.RamUsageEstimator;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -54,6 +52,8 @@
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
 
+import static org.apache.iotdb.cluster.server.monitor.Timer.Statistic.RAFT_COMMIT_LOG_IN_MANAGER;
+
 public abstract class RaftLogManager {
 
   private static final Logger logger = LoggerFactory.getLogger(RaftLogManager.class);
@@ -676,8 +676,7 @@
       logger.error("{}: persistent raft log error:", name, e);
       throw new LogExecutionException(e);
     } finally {
-      Statistic.RAFT_SENDER_COMMIT_APPEND_AND_STABLE_LOGS.calOperationCostTimeFromStart(
-          startTime);
+      Statistic.RAFT_SENDER_COMMIT_APPEND_AND_STABLE_LOGS.calOperationCostTimeFromStart(startTime);
     }
   }
 
@@ -693,8 +692,7 @@
     }
 
     synchronized (this) {
-      Statistic.RAFT_SENDER_COMPETE_LOG_MANAGER_BEFORE_COMMIT.calOperationCostTimeFromStart(
-          start);
+      Statistic.RAFT_SENDER_COMPETE_LOG_MANAGER_BEFORE_COMMIT.calOperationCostTimeFromStart(start);
       long operationStartTime = RAFT_COMMIT_LOG_IN_MANAGER.getOperationStartTime();
 
       long startTime = Statistic.RAFT_SENDER_COMMIT_GET_LOGS.getOperationStartTime();
@@ -755,8 +753,8 @@
           changeApplyCommitIndexCond.wait(
               Math.min(
                   (unappliedLogSize
-                      - ClusterDescriptor.getInstance().getConfig().getMaxNumOfLogsInMem())
-                      / 10
+                              - ClusterDescriptor.getInstance().getConfig().getMaxNumOfLogsInMem())
+                          / 10
                       + 1,
                   1000));
         }
@@ -791,9 +789,10 @@
    *
    * @param low request index low bound
    * @param high request index upper bound
-   * @throws EntryCompactedException
-   * @throws GetEntriesWrongParametersException
+   * @throws EntryCompactedException if the entry has been compacted
+   * @throws GetEntriesWrongParametersException if low > high
    */
+  @TestOnly
   void checkBound(long low, long high)
       throws EntryCompactedException, GetEntriesWrongParametersException {
     if (low > high) {
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/log/sequencing/SynchronousSequencer.java b/cluster/src/main/java/org/apache/iotdb/cluster/log/sequencing/SynchronousSequencer.java
index c1e35aa..ec655d4 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/log/sequencing/SynchronousSequencer.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/log/sequencing/SynchronousSequencer.java
@@ -34,6 +34,7 @@
 import org.apache.iotdb.db.qp.physical.sys.LogPlan;
 
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicLong;
 
 /**
  * SynchronizedSequencer performs sequencing by taking the monitor of a LogManager within the caller
@@ -59,26 +60,30 @@
     return sendLogRequest;
   }
 
+  private static AtomicLong indexBlockCounter = new AtomicLong();
+
   @Override
   public SendLogRequest sequence(Log log) {
     SendLogRequest sendLogRequest = null;
 
-    long startTime =
-        Statistic.RAFT_SENDER_COMPETE_LOG_MANAGER_BEFORE_APPEND_V2.getOperationStartTime();
     long startWaitingTime = System.currentTimeMillis();
 
     while (true) {
+      Statistic.RAFT_INDEX_BLOCKER.add(indexBlockCounter.incrementAndGet());
+      long startTime =
+          Statistic.RAFT_SENDER_COMPETE_LOG_MANAGER_BEFORE_APPEND_V2.getOperationStartTime();
       synchronized (logManager) {
+        Statistic.RAFT_SENDER_COMPETE_LOG_MANAGER_BEFORE_APPEND_V2.calOperationCostTimeFromStart(
+            startTime);
         long occupyStart =
             Statistic.RAFT_SENDER_OCCUPY_LOG_MANAGER_IN_APPEND.getOperationStartTime();
+        indexBlockCounter.decrementAndGet();
+
         if (!IoTDBDescriptor.getInstance().getConfig().isEnableMemControl()
             || (logManager.getLastLogIndex() - logManager.getCommitLogIndex()
                 <= ClusterDescriptor.getInstance()
                     .getConfig()
                     .getUnCommittedRaftLogNumForRejectThreshold())) {
-          Statistic.RAFT_SENDER_COMPETE_LOG_MANAGER_BEFORE_APPEND_V2.calOperationCostTimeFromStart(
-              startTime);
-
           // if the log contains a physical plan which is not a LogPlan, assign the same index to
           // the plan so the state machine can be bridged with the consensus
           if (log instanceof RequestLog
@@ -97,6 +102,8 @@
 
           startTime = Statistic.RAFT_SENDER_BUILD_LOG_REQUEST.getOperationStartTime();
           sendLogRequest = buildSendLogRequest(log);
+          Statistic.LOG_DISPATCHER_FROM_RECEIVE_TO_CREATE.calOperationCostTimeFromStart(
+              log.getReceiveTime());
           log.setCreateTime(System.nanoTime());
           Statistic.RAFT_SENDER_BUILD_LOG_REQUEST.calOperationCostTimeFromStart(startTime);
 
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/server/handlers/caller/AppendNodeEntryHandler.java b/cluster/src/main/java/org/apache/iotdb/cluster/server/handlers/caller/AppendNodeEntryHandler.java
index cc46844..3dc18e3 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/server/handlers/caller/AppendNodeEntryHandler.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/server/handlers/caller/AppendNodeEntryHandler.java
@@ -86,13 +86,6 @@
     long resp = response.status;
 
     if (resp == RESPONSE_STRONG_ACCEPT || resp == RESPONSE_AGREE) {
-      member
-          .getVotingLogList()
-          .onStronglyAccept(
-              log.getLog().getCurrLogIndex(),
-              log.getLog().getCurrLogTerm(),
-              trueReceiver,
-              response.signature);
       Integer count =
           entryAcceptedTimes.compute(
               log.getLog().getCurrLogIndex(),
@@ -108,6 +101,13 @@
         Statistic.RAFT_SENDER_LOG_FROM_CREATE_TO_ACCEPT.calOperationCostTimeFromStart(
             log.getLog().getCreateTime());
       }
+      member
+          .getVotingLogList()
+          .onStronglyAccept(
+              log.getLog().getCurrLogIndex(),
+              log.getLog().getCurrLogTerm(),
+              trueReceiver,
+              response.signature);
 
       member.getPeer(trueReceiver).setMatchIndex(response.lastLogIndex);
     } else if (resp > 0) {
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 7f74867..3795718 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
@@ -26,17 +26,18 @@
 import org.apache.iotdb.cluster.exception.CheckConsistencyException;
 import org.apache.iotdb.cluster.exception.SnapshotInstallationException;
 import org.apache.iotdb.cluster.exception.UnknownLogTypeException;
+import org.apache.iotdb.cluster.expr.nbraft.SlidingWindowLogAppender;
 import org.apache.iotdb.cluster.impl.PlanBasedStateMachine;
 import org.apache.iotdb.cluster.log.IndirectLogDispatcher;
 import org.apache.iotdb.cluster.log.Log;
 import org.apache.iotdb.cluster.log.LogParser;
 import org.apache.iotdb.cluster.log.Snapshot;
 import org.apache.iotdb.cluster.log.appender.BlockingLogAppender;
-import org.apache.iotdb.cluster.expr.nbraft.SlidingWindowLogAppender;
 import org.apache.iotdb.cluster.log.logtypes.AddNodeLog;
 import org.apache.iotdb.cluster.log.logtypes.RemoveNodeLog;
 import org.apache.iotdb.cluster.log.manage.FilePartitionedSnapshotLogManager;
 import org.apache.iotdb.cluster.log.manage.PartitionedSnapshotLogManager;
+import org.apache.iotdb.cluster.log.manage.RaftLogManager;
 import org.apache.iotdb.cluster.log.snapshot.FileSnapshot;
 import org.apache.iotdb.cluster.log.snapshot.PartitionedSnapshot;
 import org.apache.iotdb.cluster.log.snapshot.PullSnapshotTask;
@@ -1036,7 +1037,7 @@
   }
 
   @TestOnly
-  void setLogManager(PartitionedSnapshotLogManager<Snapshot> logManager) {
+  public void setLogManager(RaftLogManager logManager) {
     if (this.logManager != null) {
       this.logManager.close();
     }
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 0713ea7..4851dc3 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
@@ -31,11 +31,12 @@
 import org.apache.iotdb.cluster.exception.CheckConsistencyException;
 import org.apache.iotdb.cluster.exception.LogExecutionException;
 import org.apache.iotdb.cluster.exception.UnknownLogTypeException;
+import org.apache.iotdb.cluster.expr.craft.FragmentedLog;
+import org.apache.iotdb.cluster.expr.craft.FragmentedLogDispatcher;
 import org.apache.iotdb.cluster.expr.vgraft.KeyManager;
 import org.apache.iotdb.cluster.expr.vgraft.TrustValueHolder;
 import org.apache.iotdb.cluster.log.CommitLogCallback;
 import org.apache.iotdb.cluster.log.CommitLogTask;
-import org.apache.iotdb.cluster.expr.craft.FragmentedLogDispatcher;
 import org.apache.iotdb.cluster.log.HardState;
 import org.apache.iotdb.cluster.log.IndirectLogDispatcher;
 import org.apache.iotdb.cluster.log.Log;
@@ -50,7 +51,6 @@
 import org.apache.iotdb.cluster.log.appender.LogAppender;
 import org.apache.iotdb.cluster.log.appender.LogAppenderFactory;
 import org.apache.iotdb.cluster.log.catchup.CatchUpTask;
-import org.apache.iotdb.cluster.expr.craft.FragmentedLog;
 import org.apache.iotdb.cluster.log.logtypes.RequestLog;
 import org.apache.iotdb.cluster.log.manage.RaftLogManager;
 import org.apache.iotdb.cluster.log.sequencing.AsynchronousSequencer.Factory;
@@ -1200,21 +1200,10 @@
     }
   }
 
-  protected TSStatus processPlanLocallyV2(IConsensusRequest plan) {
-    long totalStartTime = System.nanoTime();
-    logger.debug("{}: Processing plan {}", name, plan);
-    if (readOnly) {
-      return StatusUtils.NODE_READ_ONLY;
-    }
-
+  protected Log parseLog(IConsensusRequest plan) throws UnknownLogTypeException {
     Log log;
     if (plan instanceof LogPlan) {
-      try {
-        log = LogParser.getINSTANCE().parse(((LogPlan) plan).getLog());
-      } catch (UnknownLogTypeException e) {
-        logger.error("Can not parse LogPlan {}", plan, e);
-        return StatusUtils.PARSE_LOG_ERROR;
-      }
+      log = LogParser.getINSTANCE().parse(((LogPlan) plan).getLog());
     } else {
       log = new RequestLog();
       ((RequestLog) log).setRequest(plan);
@@ -1224,11 +1213,33 @@
       log = new FragmentedLog(log, allNodes.size());
     }
     log.setReceiveTime(System.nanoTime());
+    return log;
+  }
+
+  private boolean checkLogSize(Log log) {
+    return !ClusterDescriptor.getInstance().getConfig().isEnableRaftLogPersistence()
+        || log.serialize().capacity() + Integer.BYTES
+            < ClusterDescriptor.getInstance().getConfig().getRaftLogBufferSize();
+  }
+
+  protected TSStatus processPlanLocallyV2(IConsensusRequest plan) {
+    if (readOnly) {
+      return StatusUtils.NODE_READ_ONLY;
+    }
+
+    long totalStartTime = System.nanoTime();
+    logger.debug("{}: Processing plan {}", name, plan);
+
+    Log log;
+    try {
+      log = parseLog(plan);
+    } catch (UnknownLogTypeException e) {
+      logger.error("Can not parse LogPlan {}", plan, e);
+      return StatusUtils.PARSE_LOG_ERROR;
+    }
 
     // just like processPlanLocally,we need to check the size of log
-    if (ClusterDescriptor.getInstance().getConfig().isEnableRaftLogPersistence()
-        && log.serialize().capacity() + Integer.BYTES
-            >= ClusterDescriptor.getInstance().getConfig().getRaftLogBufferSize()) {
+    if (!checkLogSize(log)) {
       logger.error(
           "Log cannot fit into buffer, please increase raft_log_buffer_size;"
               + "or reduce the size of requests you send.");
@@ -1777,6 +1788,8 @@
    * wait until "voteCounter" counts down to zero, which means the quorum has received the log, or
    * one follower tells the node that it is no longer a valid leader, or a timeout is triggered.
    */
+  private AtomicLong appendBlockerCounter = new AtomicLong();
+
   protected AppendLogResult waitAppendResult(VotingLog log, int quorumSize) {
     // wait for the followers to vote
     long startTime = Timer.Statistic.RAFT_SENDER_VOTE_COUNTER.getOperationStartTime();
@@ -1784,6 +1797,9 @@
     int weaklyAccepted = log.getWeaklyAcceptedNodeIds().size();
     int stronglyAccepted = totalAccepted - weaklyAccepted;
 
+    if (Timer.ENABLE_INSTRUMENTING) {
+      Statistic.RAFT_APPEND_BLOCKER.add(appendBlockerCounter.incrementAndGet());
+    }
     if (log.getLog().getCurrLogIndex() == Long.MIN_VALUE
         || ((!ClusterDescriptor.getInstance().getConfig().isUseVGRaft()
                     && stronglyAccepted < quorumSize
@@ -1795,6 +1811,9 @@
 
       waitAppendResultLoop(log, quorumSize);
     }
+    if (Timer.ENABLE_INSTRUMENTING) {
+      appendBlockerCounter.decrementAndGet();
+    }
     totalAccepted = votingLogList.totalAcceptedNodeNum(log);
     weaklyAccepted = log.getWeaklyAcceptedNodeIds().size();
     stronglyAccepted = totalAccepted - weaklyAccepted;
@@ -1823,12 +1842,17 @@
     return AppendLogResult.OK;
   }
 
+  private AtomicLong applyBlockerCounter = new AtomicLong();
+
   @SuppressWarnings("java:S2445")
   protected void waitApply(Log log) throws LogExecutionException {
     long startTime;
 
     // when using async applier, the log here may not be applied. To return the execution
     // result, we must wait until the log is applied.
+    if (Timer.ENABLE_INSTRUMENTING) {
+      Statistic.RAFT_APPLY_BLOCKER.add(applyBlockerCounter.incrementAndGet());
+    }
     startTime = Statistic.RAFT_SENDER_COMMIT_WAIT_LOG_APPLY.getOperationStartTime();
     synchronized (log) {
       while (!log.isApplied()) {
@@ -1841,6 +1865,7 @@
         }
       }
     }
+    applyBlockerCounter.decrementAndGet();
     Statistic.RAFT_SENDER_COMMIT_WAIT_LOG_APPLY.calOperationCostTimeFromStart(startTime);
     if (log.getException() != null) {
       throw new LogExecutionException(log.getException());
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/server/monitor/Timer.java b/cluster/src/main/java/org/apache/iotdb/cluster/server/monitor/Timer.java
index 07b35b4..4485244 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/server/monitor/Timer.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/server/monitor/Timer.java
@@ -361,11 +361,15 @@
     RAFT_RELAYED_ENTRY(RAFT_MEMBER_RECEIVER, "number of relayed entries", 1, true, ROOT),
     RAFT_SEND_RELAY_ACK(RAFT_MEMBER_RECEIVER, "send relay ack", 1, true, ROOT),
     RAFT_SENT_ENTRY_SIZE(RAFT_MEMBER_SENDER, "sent entry size", 1, true, ROOT),
+    DISPATCHER_QUEUE_LENGTH(RAFT_MEMBER_SENDER, "dispatcher queue length", 1, true, ROOT),
     RAFT_RELAYED_LEVEL1_NUM(RAFT_MEMBER_SENDER, "level 1 relay node number", 1, true, ROOT),
     RAFT_RECEIVE_RELAY_ACK(RAFT_MEMBER_SENDER, "receive relay ack", 1, true, ROOT),
     RAFT_SENDER_OOW(RAFT_MEMBER_SENDER, "out of window", 1, true, ROOT),
     RAFT_WEAK_ACCEPT(RAFT_MEMBER_SENDER, "weak accept", 1, true, ROOT),
-    RAFT_CONCURRENT_SENDER(RAFT_MEMBER_SENDER, "concurrent sender", 1, true, ROOT);
+    RAFT_CONCURRENT_SENDER(RAFT_MEMBER_SENDER, "concurrent sender", 1, true, ROOT),
+    RAFT_INDEX_BLOCKER(RAFT_MEMBER_SENDER, "index blocker", 1, true, ROOT),
+    RAFT_APPEND_BLOCKER(RAFT_MEMBER_SENDER, "append blocker", 1, true, ROOT),
+    RAFT_APPLY_BLOCKER(RAFT_MEMBER_SENDER, "apply blocker", 1, true, ROOT);
 
     String className;
     String blockName;
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/utils/LogUtils.java b/cluster/src/main/java/org/apache/iotdb/cluster/utils/LogUtils.java
index 8bde2e2..e8f55a9 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/utils/LogUtils.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/utils/LogUtils.java
@@ -1,5 +1,3 @@
 package org.apache.iotdb.cluster.utils;
 
-public class LogUtils {
-
-}
+public class LogUtils {}
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/client/BaseClientTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/client/BaseClientTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/client/BaseClientTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/client/BaseClientTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/client/ClientManagerTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/client/ClientManagerTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/client/ClientManagerTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/client/ClientManagerTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/client/ClientPoolFactoryTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/client/ClientPoolFactoryTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/client/ClientPoolFactoryTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/client/ClientPoolFactoryTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/client/MockClientManager.java b/cluster/src/test/java/org/apache/iotdb/cluster/client/MockClientManager.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/client/MockClientManager.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/client/MockClientManager.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/client/async/AsyncDataClientTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/client/async/AsyncDataClientTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/client/async/AsyncDataClientTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/client/async/AsyncDataClientTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/client/async/AsyncMetaClientTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/client/async/AsyncMetaClientTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/client/async/AsyncMetaClientTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/client/async/AsyncMetaClientTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/client/sync/SyncClientAdaptorTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/client/sync/SyncClientAdaptorTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/client/sync/SyncClientAdaptorTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/client/sync/SyncClientAdaptorTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/client/sync/SyncDataClientTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/client/sync/SyncDataClientTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/client/sync/SyncDataClientTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/client/sync/SyncDataClientTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/client/sync/SyncMetaClientTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/client/sync/SyncMetaClientTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/client/sync/SyncMetaClientTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/client/sync/SyncMetaClientTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/common/IoTDBTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/common/IoTDBTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/common/IoTDBTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/common/IoTDBTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestAsyncClient.java b/cluster/src/test/java/org/apache/iotdb/cluster/common/TestAsyncClient.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestAsyncClient.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/common/TestAsyncClient.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestAsyncDataClient.java b/cluster/src/test/java/org/apache/iotdb/cluster/common/TestAsyncDataClient.java
similarity index 98%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestAsyncDataClient.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/common/TestAsyncDataClient.java
index 78fd9a8..9173711 100644
--- a/cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestAsyncDataClient.java
+++ b/cluster/src/test/java/org/apache/iotdb/cluster/common/TestAsyncDataClient.java
@@ -216,7 +216,9 @@
 
   @Override
   public void appendEntry(
-      AppendEntryRequest request, AsyncMethodCallback<AppendEntryResult> resultHandler) {
+      AppendEntryRequest request,
+      boolean isVerifier,
+      AsyncMethodCallback<AppendEntryResult> resultHandler) {
     new Thread(
             () -> resultHandler.onComplete(new AppendEntryResult(BaseMember.dummyResponse.get())))
         .start();
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestAsyncMetaClient.java b/cluster/src/test/java/org/apache/iotdb/cluster/common/TestAsyncMetaClient.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestAsyncMetaClient.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/common/TestAsyncMetaClient.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestDataGroupMember.java b/cluster/src/test/java/org/apache/iotdb/cluster/common/TestDataGroupMember.java
similarity index 92%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestDataGroupMember.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/common/TestDataGroupMember.java
index fe274e5..c406337 100644
--- a/cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestDataGroupMember.java
+++ b/cluster/src/test/java/org/apache/iotdb/cluster/common/TestDataGroupMember.java
@@ -33,8 +33,9 @@
 
   public TestDataGroupMember() {
     super(
-        TestUtils.getNode(0), new PartitionGroup(Collections.singletonList(TestUtils.getNode(0))),
-            new PlanBasedStateMachine());
+        TestUtils.getNode(0),
+        new PartitionGroup(Collections.singletonList(TestUtils.getNode(0))),
+        new PlanBasedStateMachine());
     setQueryManager(new ClusterQueryManager());
     this.slotManager = new SlotManager(ClusterConstant.SLOT_NUM, null, "");
   }
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestException.java b/cluster/src/test/java/org/apache/iotdb/cluster/common/TestException.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestException.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/common/TestException.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestLog.java b/cluster/src/test/java/org/apache/iotdb/cluster/common/TestLog.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestLog.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/common/TestLog.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestLogApplier.java b/cluster/src/test/java/org/apache/iotdb/cluster/common/TestLogApplier.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestLogApplier.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/common/TestLogApplier.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestLogManager.java b/cluster/src/test/java/org/apache/iotdb/cluster/common/TestLogManager.java
similarity index 89%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestLogManager.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/common/TestLogManager.java
index d7b8a24..01cd71e 100644
--- a/cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestLogManager.java
+++ b/cluster/src/test/java/org/apache/iotdb/cluster/common/TestLogManager.java
@@ -27,7 +27,11 @@
 public class TestLogManager extends RaftLogManager {
 
   public TestLogManager(int nodeIdentifier) {
-    super(new SyncLogDequeSerializer(nodeIdentifier), new TestLogApplier(), "Test", new PlanBasedStateMachine());
+    super(
+        new SyncLogDequeSerializer(nodeIdentifier),
+        new TestLogApplier(),
+        "Test",
+        new PlanBasedStateMachine());
   }
 
   @Override
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestManagedSeriesReader.java b/cluster/src/test/java/org/apache/iotdb/cluster/common/TestManagedSeriesReader.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestManagedSeriesReader.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/common/TestManagedSeriesReader.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestMetaGroupMember.java b/cluster/src/test/java/org/apache/iotdb/cluster/common/TestMetaGroupMember.java
similarity index 94%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestMetaGroupMember.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/common/TestMetaGroupMember.java
index 1309348..bae946f 100644
--- a/cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestMetaGroupMember.java
+++ b/cluster/src/test/java/org/apache/iotdb/cluster/common/TestMetaGroupMember.java
@@ -31,8 +31,7 @@
   public TestMetaGroupMember() {
     super(new PlanBasedStateMachine());
 
-    MetaSingleSnapshotLogManager manager =
-        new MetaSingleSnapshotLogManager(this);
+    MetaSingleSnapshotLogManager manager = new MetaSingleSnapshotLogManager(this);
     setLogManager(manager);
 
     PartitionGroup group = new PartitionGroup();
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestPartitionedLogManager.java b/cluster/src/test/java/org/apache/iotdb/cluster/common/TestPartitionedLogManager.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestPartitionedLogManager.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/common/TestPartitionedLogManager.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestSnapshot.java b/cluster/src/test/java/org/apache/iotdb/cluster/common/TestSnapshot.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestSnapshot.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/common/TestSnapshot.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestSyncClient.java b/cluster/src/test/java/org/apache/iotdb/cluster/common/TestSyncClient.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestSyncClient.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/common/TestSyncClient.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestUtils.java b/cluster/src/test/java/org/apache/iotdb/cluster/common/TestUtils.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/common/TestUtils.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/common/TestUtils.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/integration/BaseSingleNodeTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/integration/BaseSingleNodeTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/integration/BaseSingleNodeTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/integration/BaseSingleNodeTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/integration/SingleNodeTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/integration/SingleNodeTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/integration/SingleNodeTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/integration/SingleNodeTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/CommitLogCallbackTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/log/CommitLogCallbackTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/log/CommitLogCallbackTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/log/CommitLogCallbackTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/CommitLogTaskTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/log/CommitLogTaskTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/log/CommitLogTaskTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/log/CommitLogTaskTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/HardStateTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/log/HardStateTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/log/HardStateTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/log/HardStateTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/LogDispatcherTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/log/LogDispatcherTest.java
similarity index 97%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/log/LogDispatcherTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/log/LogDispatcherTest.java
index 163eaa6..c2e8dc4 100644
--- a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/LogDispatcherTest.java
+++ b/cluster/src/test/java/org/apache/iotdb/cluster/log/LogDispatcherTest.java
@@ -75,6 +75,7 @@
               @Override
               public void appendEntry(
                   AppendEntryRequest request,
+                  boolean isVerifier,
                   AsyncMethodCallback<AppendEntryResult> resultHandler) {
                 new Thread(
                         () -> {
@@ -114,7 +115,9 @@
 
               @Override
               public void appendEntry(
-                  AppendEntryRequest request, AsyncMethodCallback<AppendEntryResult> resultHandler)
+                  AppendEntryRequest request,
+                  boolean isVerifier,
+                  AsyncMethodCallback<AppendEntryResult> resultHandler)
                   throws TException {
                 try {
                   if (!downNode.contains(node)) {
@@ -147,7 +150,8 @@
           public Client getSyncClient(Node node) {
             return new TestSyncClient() {
               @Override
-              public AppendEntryResult appendEntry(AppendEntryRequest request) throws TException {
+              public AppendEntryResult appendEntry(AppendEntryRequest request, boolean isVerifier)
+                  throws TException {
                 try {
                   if (!downNode.contains(node)) {
                     return mockedAppendEntry(request);
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/LogParserTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/log/LogParserTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/log/LogParserTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/log/LogParserTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/applier/AsyncDataLogApplierTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/log/applier/AsyncDataLogApplierTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/log/applier/AsyncDataLogApplierTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/log/applier/AsyncDataLogApplierTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/applier/DataLogApplierTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/log/applier/DataLogApplierTest.java
similarity index 96%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/log/applier/DataLogApplierTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/log/applier/DataLogApplierTest.java
index 8835a84..12ddbdf 100644
--- a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/applier/DataLogApplierTest.java
+++ b/cluster/src/test/java/org/apache/iotdb/cluster/log/applier/DataLogApplierTest.java
@@ -465,20 +465,19 @@
   @Test
   public void testApplyDeletePartitionFilter() throws QueryProcessException {
     applier.setStateMachine(
-            new PlanBasedStateMachine().setPlanExecutor(
-                    new PlanExecutor() {
-                      @Override
-                      public boolean processNonQuery(PhysicalPlan plan) {
-                        assertTrue(plan instanceof DeletePlan);
-                        DeletePlan deletePlan = (DeletePlan) plan;
-                        TimePartitionFilter planFilter = deletePlan.getPartitionFilter();
-                        TimePartitionFilter memberFilter = testDataGroupMember.getTimePartitionFilter();
-                        assertEquals(planFilter, memberFilter);
-                        return true;
-                      }
-                    }
-            )
-        );
+        new PlanBasedStateMachine()
+            .setPlanExecutor(
+                new PlanExecutor() {
+                  @Override
+                  public boolean processNonQuery(PhysicalPlan plan) {
+                    assertTrue(plan instanceof DeletePlan);
+                    DeletePlan deletePlan = (DeletePlan) plan;
+                    TimePartitionFilter planFilter = deletePlan.getPartitionFilter();
+                    TimePartitionFilter memberFilter = testDataGroupMember.getTimePartitionFilter();
+                    assertEquals(planFilter, memberFilter);
+                    return true;
+                  }
+                }));
 
     DeletePlan deletePlan = new DeletePlan();
     RequestLog log = new RequestLog(deletePlan);
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/applier/MetaLogApplierTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/log/applier/MetaLogApplierTest.java
similarity index 97%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/log/applier/MetaLogApplierTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/log/applier/MetaLogApplierTest.java
index b2e7525..436e675 100644
--- a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/applier/MetaLogApplierTest.java
+++ b/cluster/src/test/java/org/apache/iotdb/cluster/log/applier/MetaLogApplierTest.java
@@ -68,7 +68,8 @@
         }
       };
 
-  private LogApplier applier = new MetaLogApplier(testMetaGroupMember, testMetaGroupMember.getStateMachine());
+  private LogApplier applier =
+      new MetaLogApplier(testMetaGroupMember, testMetaGroupMember.getStateMachine());
 
   @Override
   @After
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/catchup/CatchUpTaskTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/log/catchup/CatchUpTaskTest.java
similarity index 98%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/log/catchup/CatchUpTaskTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/log/catchup/CatchUpTaskTest.java
index 3c4c812..2f221d8 100644
--- a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/catchup/CatchUpTaskTest.java
+++ b/cluster/src/test/java/org/apache/iotdb/cluster/log/catchup/CatchUpTaskTest.java
@@ -78,7 +78,7 @@
         public Client getSyncClient(Node node) {
           return new TestSyncClient() {
             @Override
-            public AppendEntryResult appendEntry(AppendEntryRequest request) {
+            public AppendEntryResult appendEntry(AppendEntryRequest request, boolean isVerifier) {
               return dummyAppendEntry(request);
             }
 
@@ -104,7 +104,9 @@
           return new TestAsyncClient() {
             @Override
             public void appendEntry(
-                AppendEntryRequest request, AsyncMethodCallback<AppendEntryResult> resultHandler) {
+                AppendEntryRequest request,
+                boolean isVerifier,
+                AsyncMethodCallback<AppendEntryResult> resultHandler) {
               new Thread(() -> resultHandler.onComplete(dummyAppendEntry(request))).start();
             }
 
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/catchup/LogCatchUpTaskTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/log/catchup/LogCatchUpTaskTest.java
similarity index 97%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/log/catchup/LogCatchUpTaskTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/log/catchup/LogCatchUpTaskTest.java
index 737d264..abea578 100644
--- a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/catchup/LogCatchUpTaskTest.java
+++ b/cluster/src/test/java/org/apache/iotdb/cluster/log/catchup/LogCatchUpTaskTest.java
@@ -71,7 +71,9 @@
           return new TestAsyncClient() {
             @Override
             public void appendEntry(
-                AppendEntryRequest request, AsyncMethodCallback<AppendEntryResult> resultHandler) {
+                AppendEntryRequest request,
+                boolean isVerifier,
+                AsyncMethodCallback<AppendEntryResult> resultHandler) {
               new Thread(
                       () -> {
                         try {
@@ -104,7 +106,8 @@
         public Client getSyncClient(Node node) {
           return new TestSyncClient() {
             @Override
-            public AppendEntryResult appendEntry(AppendEntryRequest request) throws TException {
+            public AppendEntryResult appendEntry(AppendEntryRequest request, boolean isVerifier)
+                throws TException {
               try {
                 return dummyAppendEntry(request);
               } catch (UnknownLogTypeException e) {
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/catchup/SnapshotCatchUpTaskTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/log/catchup/SnapshotCatchUpTaskTest.java
similarity index 98%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/log/catchup/SnapshotCatchUpTaskTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/log/catchup/SnapshotCatchUpTaskTest.java
index ec58b11..2321ec4 100644
--- a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/catchup/SnapshotCatchUpTaskTest.java
+++ b/cluster/src/test/java/org/apache/iotdb/cluster/log/catchup/SnapshotCatchUpTaskTest.java
@@ -75,7 +75,9 @@
           return new TestAsyncClient() {
             @Override
             public void appendEntry(
-                AppendEntryRequest request, AsyncMethodCallback<AppendEntryResult> resultHandler) {
+                AppendEntryRequest request,
+                boolean isVerifier,
+                AsyncMethodCallback<AppendEntryResult> resultHandler) {
               new Thread(() -> resultHandler.onComplete(dummyAppendEntry(request))).start();
             }
 
@@ -99,7 +101,7 @@
           }
           return new TestSyncClient() {
             @Override
-            public AppendEntryResult appendEntry(AppendEntryRequest request) {
+            public AppendEntryResult appendEntry(AppendEntryRequest request, boolean isVerifier) {
               return dummyAppendEntry(request);
             }
 
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/logtypes/SerializeLogTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/log/logtypes/SerializeLogTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/log/logtypes/SerializeLogTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/log/logtypes/SerializeLogTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/manage/CommittedEntryManagerTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/log/manage/CommittedEntryManagerTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/log/manage/CommittedEntryManagerTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/log/manage/CommittedEntryManagerTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/manage/FilePartitionedSnapshotLogManagerTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/log/manage/FilePartitionedSnapshotLogManagerTest.java
similarity index 94%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/log/manage/FilePartitionedSnapshotLogManagerTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/log/manage/FilePartitionedSnapshotLogManagerTest.java
index 4cc02b6..06c5600 100644
--- a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/manage/FilePartitionedSnapshotLogManagerTest.java
+++ b/cluster/src/test/java/org/apache/iotdb/cluster/log/manage/FilePartitionedSnapshotLogManagerTest.java
@@ -21,11 +21,9 @@
 
 import org.apache.iotdb.cluster.common.IoTDBTest;
 import org.apache.iotdb.cluster.common.TestDataGroupMember;
-import org.apache.iotdb.cluster.common.TestLogApplier;
 import org.apache.iotdb.cluster.common.TestUtils;
 import org.apache.iotdb.cluster.config.ClusterConstant;
 import org.apache.iotdb.cluster.log.Log;
-import org.apache.iotdb.cluster.log.LogApplier;
 import org.apache.iotdb.cluster.log.snapshot.FileSnapshot;
 import org.apache.iotdb.cluster.log.snapshot.PartitionedSnapshot;
 import org.apache.iotdb.cluster.partition.PartitionTable;
@@ -63,10 +61,7 @@
     PartitionTable partitionTable = TestUtils.getPartitionTable(3);
     FilePartitionedSnapshotLogManager manager =
         new FilePartitionedSnapshotLogManager(
-            partitionTable,
-            TestUtils.getNode(0),
-            TestUtils.getNode(0),
-            new TestDataGroupMember());
+            partitionTable, TestUtils.getNode(0), TestUtils.getNode(0), new TestDataGroupMember());
 
     try {
       List<Log> logs = TestUtils.prepareTestLogs(10);
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/manage/MetaSingleSnapshotLogManagerTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/log/manage/MetaSingleSnapshotLogManagerTest.java
similarity index 98%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/log/manage/MetaSingleSnapshotLogManagerTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/log/manage/MetaSingleSnapshotLogManagerTest.java
index 44beea3..bd21fc0 100644
--- a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/manage/MetaSingleSnapshotLogManagerTest.java
+++ b/cluster/src/test/java/org/apache/iotdb/cluster/log/manage/MetaSingleSnapshotLogManagerTest.java
@@ -20,7 +20,6 @@
 package org.apache.iotdb.cluster.log.manage;
 
 import org.apache.iotdb.cluster.common.IoTDBTest;
-import org.apache.iotdb.cluster.common.TestLogApplier;
 import org.apache.iotdb.cluster.common.TestUtils;
 import org.apache.iotdb.cluster.coordinator.Coordinator;
 import org.apache.iotdb.cluster.impl.PlanBasedStateMachine;
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/manage/RaftLogManagerTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/log/manage/RaftLogManagerTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/log/manage/RaftLogManagerTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/log/manage/RaftLogManagerTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/manage/UnCommittedEntryManagerTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/log/manage/UnCommittedEntryManagerTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/log/manage/UnCommittedEntryManagerTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/log/manage/UnCommittedEntryManagerTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/manage/serializable/SyncLogDequeSerializerTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/log/manage/serializable/SyncLogDequeSerializerTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/log/manage/serializable/SyncLogDequeSerializerTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/log/manage/serializable/SyncLogDequeSerializerTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/snapshot/DataSnapshotTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/log/snapshot/DataSnapshotTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/log/snapshot/DataSnapshotTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/log/snapshot/DataSnapshotTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/snapshot/FileSnapshotTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/log/snapshot/FileSnapshotTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/log/snapshot/FileSnapshotTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/log/snapshot/FileSnapshotTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/snapshot/MetaSimpleSnapshotTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/log/snapshot/MetaSimpleSnapshotTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/log/snapshot/MetaSimpleSnapshotTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/log/snapshot/MetaSimpleSnapshotTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/snapshot/PartitionedSnapshotTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/log/snapshot/PartitionedSnapshotTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/log/snapshot/PartitionedSnapshotTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/log/snapshot/PartitionedSnapshotTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/snapshot/PullSnapshotTaskDescriptorTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/log/snapshot/PullSnapshotTaskDescriptorTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/log/snapshot/PullSnapshotTaskDescriptorTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/log/snapshot/PullSnapshotTaskDescriptorTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/snapshot/PullSnapshotTaskTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/log/snapshot/PullSnapshotTaskTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/log/snapshot/PullSnapshotTaskTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/log/snapshot/PullSnapshotTaskTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/log/snapshot/SimpleSnapshot.java b/cluster/src/test/java/org/apache/iotdb/cluster/log/snapshot/SimpleSnapshot.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/log/snapshot/SimpleSnapshot.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/log/snapshot/SimpleSnapshot.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/partition/SchemaProcessorWhiteBox.java b/cluster/src/test/java/org/apache/iotdb/cluster/partition/SchemaProcessorWhiteBox.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/partition/SchemaProcessorWhiteBox.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/partition/SchemaProcessorWhiteBox.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/partition/SlotManagerTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/partition/SlotManagerTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/partition/SlotManagerTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/partition/SlotManagerTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/partition/SlotPartitionTableTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/partition/SlotPartitionTableTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/partition/SlotPartitionTableTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/partition/SlotPartitionTableTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/query/BaseQueryTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/query/BaseQueryTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/query/BaseQueryTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/query/BaseQueryTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/query/ClusterAggregateExecutorTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/query/ClusterAggregateExecutorTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/query/ClusterAggregateExecutorTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/query/ClusterAggregateExecutorTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/query/ClusterDataQueryExecutorTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/query/ClusterDataQueryExecutorTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/query/ClusterDataQueryExecutorTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/query/ClusterDataQueryExecutorTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/query/ClusterPhysicalGeneratorTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/query/ClusterPhysicalGeneratorTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/query/ClusterPhysicalGeneratorTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/query/ClusterPhysicalGeneratorTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/query/ClusterPlanExecutorTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/query/ClusterPlanExecutorTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/query/ClusterPlanExecutorTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/query/ClusterPlanExecutorTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/query/ClusterPlannerTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/query/ClusterPlannerTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/query/ClusterPlannerTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/query/ClusterPlannerTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/query/ClusterQueryRouterTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/query/ClusterQueryRouterTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/query/ClusterQueryRouterTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/query/ClusterQueryRouterTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/query/ClusterUDTFQueryExecutorTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/query/ClusterUDTFQueryExecutorTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/query/ClusterUDTFQueryExecutorTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/query/ClusterUDTFQueryExecutorTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/query/LoadConfigurationTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/query/LoadConfigurationTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/query/LoadConfigurationTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/query/LoadConfigurationTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/query/fill/ClusterFillExecutorTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/query/fill/ClusterFillExecutorTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/query/fill/ClusterFillExecutorTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/query/fill/ClusterFillExecutorTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/query/groupby/ClusterGroupByNoVFilterDataSetTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/query/groupby/ClusterGroupByNoVFilterDataSetTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/query/groupby/ClusterGroupByNoVFilterDataSetTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/query/groupby/ClusterGroupByNoVFilterDataSetTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/query/groupby/ClusterGroupByVFilterDataSetTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/query/groupby/ClusterGroupByVFilterDataSetTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/query/groupby/ClusterGroupByVFilterDataSetTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/query/groupby/ClusterGroupByVFilterDataSetTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/query/groupby/MergeGroupByExecutorTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/query/groupby/MergeGroupByExecutorTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/query/groupby/MergeGroupByExecutorTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/query/groupby/MergeGroupByExecutorTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/query/groupby/RemoteGroupByExecutorTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/query/groupby/RemoteGroupByExecutorTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/query/groupby/RemoteGroupByExecutorTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/query/groupby/RemoteGroupByExecutorTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/query/last/ClusterLastQueryExecutorTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/query/last/ClusterLastQueryExecutorTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/query/last/ClusterLastQueryExecutorTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/query/last/ClusterLastQueryExecutorTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/query/manage/ClusterQueryManagerTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/query/manage/ClusterQueryManagerTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/query/manage/ClusterQueryManagerTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/query/manage/ClusterQueryManagerTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/query/manage/QueryCoordinatorTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/query/manage/QueryCoordinatorTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/query/manage/QueryCoordinatorTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/query/manage/QueryCoordinatorTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/query/reader/ClusterReaderFactoryTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/query/reader/ClusterReaderFactoryTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/query/reader/ClusterReaderFactoryTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/query/reader/ClusterReaderFactoryTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/query/reader/ClusterTimeGeneratorTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/query/reader/ClusterTimeGeneratorTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/query/reader/ClusterTimeGeneratorTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/query/reader/ClusterTimeGeneratorTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/query/reader/DatasourceInfoTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/query/reader/DatasourceInfoTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/query/reader/DatasourceInfoTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/query/reader/DatasourceInfoTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/query/reader/RemoteSeriesReaderByTimestampTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/query/reader/RemoteSeriesReaderByTimestampTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/query/reader/RemoteSeriesReaderByTimestampTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/query/reader/RemoteSeriesReaderByTimestampTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/query/reader/RemoteSimpleSeriesReaderTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/query/reader/RemoteSimpleSeriesReaderTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/query/reader/RemoteSimpleSeriesReaderTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/query/reader/RemoteSimpleSeriesReaderTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/query/reader/mult/AssignPathManagedMergeReaderTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/query/reader/mult/AssignPathManagedMergeReaderTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/query/reader/mult/AssignPathManagedMergeReaderTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/query/reader/mult/AssignPathManagedMergeReaderTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/query/reader/mult/MultSeriesRawDataPointReaderTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/query/reader/mult/MultSeriesRawDataPointReaderTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/query/reader/mult/MultSeriesRawDataPointReaderTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/query/reader/mult/MultSeriesRawDataPointReaderTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/query/reader/mult/RemoteMultSeriesReaderTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/query/reader/mult/RemoteMultSeriesReaderTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/query/reader/mult/RemoteMultSeriesReaderTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/query/reader/mult/RemoteMultSeriesReaderTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/server/clusterinfo/ClusterInfoServerTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/server/clusterinfo/ClusterInfoServerTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/server/clusterinfo/ClusterInfoServerTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/server/clusterinfo/ClusterInfoServerTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/server/clusterinfo/ClusterInfoServiceImplTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/server/clusterinfo/ClusterInfoServiceImplTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/server/clusterinfo/ClusterInfoServiceImplTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/server/clusterinfo/ClusterInfoServiceImplTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/server/handlers/caller/AppendNodeEntryHandlerTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/server/handlers/caller/AppendNodeEntryHandlerTest.java
similarity index 77%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/server/handlers/caller/AppendNodeEntryHandlerTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/server/handlers/caller/AppendNodeEntryHandlerTest.java
index 538040c..ba3c052 100644
--- a/cluster/src/test_back/java/org/apache/iotdb/cluster/server/handlers/caller/AppendNodeEntryHandlerTest.java
+++ b/cluster/src/test/java/org/apache/iotdb/cluster/server/handlers/caller/AppendNodeEntryHandlerTest.java
@@ -29,7 +29,6 @@
 import org.apache.iotdb.cluster.rpc.thrift.AppendEntryResult;
 import org.apache.iotdb.cluster.server.Response;
 import org.apache.iotdb.cluster.server.member.RaftMember;
-import org.apache.iotdb.cluster.server.monitor.PeerInfo;
 import org.apache.iotdb.db.exception.StorageEngineException;
 import org.apache.iotdb.db.utils.EnvironmentUtils;
 
@@ -43,7 +42,6 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
 
 public class AppendNodeEntryHandlerTest {
 
@@ -70,13 +68,10 @@
     try {
       ClusterDescriptor.getInstance().getConfig().setReplicationNum(10);
       VotingLog votingLog = new VotingLog(log, 10);
-      PeerInfo peerInfo = new PeerInfo(1);
       for (int i = 0; i < 10; i++) {
         AppendNodeEntryHandler handler = new AppendNodeEntryHandler();
-        handler.setLeaderShipStale(leadershipStale);
         handler.setLog(votingLog);
         handler.setMember(member);
-        handler.setReceiverTerm(receiverTerm);
         handler.setDirectReceiver(TestUtils.getNode(i));
         handler.setQuorumSize(ClusterDescriptor.getInstance().getConfig().getReplicationNum() / 2);
         long resp = i >= 5 ? Response.RESPONSE_AGREE : Response.RESPONSE_LOG_MISMATCH;
@@ -87,7 +82,7 @@
 
       assertEquals(-1, receiverTerm.get());
       assertFalse(leadershipStale.get());
-      assertEquals(5, votingLog.getStronglyAcceptedNodeIds().size());
+      assertEquals(5, member.getVotingLogList().totalAcceptedNodeNum(votingLog));
     } finally {
       ClusterDescriptor.getInstance().getConfig().setReplicationNum(replicationNum);
     }
@@ -95,18 +90,13 @@
 
   @Test
   public void testNoAgreement() {
-    AtomicLong receiverTerm = new AtomicLong(-1);
-    AtomicBoolean leadershipStale = new AtomicBoolean(false);
     Log log = new TestLog();
     VotingLog votingLog = new VotingLog(log, 10);
-    PeerInfo peerInfo = new PeerInfo(1);
 
     for (int i = 0; i < 3; i++) {
       AppendNodeEntryHandler handler = new AppendNodeEntryHandler();
-      handler.setLeaderShipStale(leadershipStale);
       handler.setLog(votingLog);
       handler.setMember(member);
-      handler.setReceiverTerm(receiverTerm);
       handler.setDirectReceiver(TestUtils.getNode(i));
       handler.setQuorumSize(ClusterDescriptor.getInstance().getConfig().getReplicationNum() / 2);
       AppendEntryResult result = new AppendEntryResult();
@@ -114,58 +104,43 @@
       handler.onComplete(result);
     }
 
-    assertEquals(-1, receiverTerm.get());
-    assertFalse(leadershipStale.get());
-    assertEquals(3, votingLog.getStronglyAcceptedNodeIds().size());
+    assertEquals(3, member.getVotingLogList().totalAcceptedNodeNum(votingLog));
   }
 
   @Test
   public void testLeadershipStale() throws InterruptedException {
-    AtomicLong receiverTerm = new AtomicLong(-1);
-    AtomicBoolean leadershipStale = new AtomicBoolean(false);
     Log log = new TestLog();
     VotingLog votingLog = new VotingLog(log, 10);
-    PeerInfo peerInfo = new PeerInfo(1);
 
     synchronized (votingLog) {
       AppendNodeEntryHandler handler = new AppendNodeEntryHandler();
-      handler.setLeaderShipStale(leadershipStale);
       handler.setLog(votingLog);
       handler.setMember(member);
-      handler.setReceiverTerm(receiverTerm);
       handler.setDirectReceiver(TestUtils.getNode(0));
       handler.setQuorumSize(ClusterDescriptor.getInstance().getConfig().getReplicationNum() / 2);
       new Thread(() -> handler.onComplete(new AppendEntryResult(100L))).start();
       votingLog.wait();
     }
-    assertEquals(100, receiverTerm.get());
-    assertTrue(leadershipStale.get());
-    assertEquals(0, votingLog.getStronglyAcceptedNodeIds().size());
+    assertEquals(100, member.getTerm().get());
+    assertEquals(0, member.getVotingLogList().totalAcceptedNodeNum(votingLog));
   }
 
   @Test
   public void testError() {
-    AtomicLong receiverTerm = new AtomicLong(-1);
-    AtomicBoolean leadershipStale = new AtomicBoolean(false);
     Log log = new TestLog();
     int replicationNum = ClusterDescriptor.getInstance().getConfig().getReplicationNum();
     ClusterDescriptor.getInstance().getConfig().setReplicationNum(10);
     try {
       VotingLog votingLog = new VotingLog(log, 10);
-      PeerInfo peerInfo = new PeerInfo(1);
 
       AppendNodeEntryHandler handler = new AppendNodeEntryHandler();
-      handler.setLeaderShipStale(leadershipStale);
       handler.setLog(votingLog);
       handler.setMember(member);
-      handler.setReceiverTerm(receiverTerm);
       handler.setDirectReceiver(TestUtils.getNode(0));
       handler.setQuorumSize(ClusterDescriptor.getInstance().getConfig().getReplicationNum() / 2);
       handler.onError(new TestException());
 
-      assertEquals(-1, receiverTerm.get());
-      assertFalse(leadershipStale.get());
-      assertEquals(0, votingLog.getStronglyAcceptedNodeIds().size());
+      assertEquals(0, member.getVotingLogList().totalAcceptedNodeNum(votingLog));
 
     } finally {
       ClusterDescriptor.getInstance().getConfig().setReplicationNum(replicationNum);
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/server/handlers/caller/ElectionHandlerTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/server/handlers/caller/ElectionHandlerTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/server/handlers/caller/ElectionHandlerTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/server/handlers/caller/ElectionHandlerTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/server/handlers/caller/GenericHandlerTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/server/handlers/caller/GenericHandlerTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/server/handlers/caller/GenericHandlerTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/server/handlers/caller/GenericHandlerTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/server/handlers/caller/HeartbeatHandlerTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/server/handlers/caller/HeartbeatHandlerTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/server/handlers/caller/HeartbeatHandlerTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/server/handlers/caller/HeartbeatHandlerTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/server/handlers/caller/JoinClusterHandlerTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/server/handlers/caller/JoinClusterHandlerTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/server/handlers/caller/JoinClusterHandlerTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/server/handlers/caller/JoinClusterHandlerTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/server/handlers/caller/LogCatchUpHandlerTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/server/handlers/caller/LogCatchUpHandlerTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/server/handlers/caller/LogCatchUpHandlerTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/server/handlers/caller/LogCatchUpHandlerTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/server/handlers/caller/PullMeasurementSchemaHandlerTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/server/handlers/caller/PullMeasurementSchemaHandlerTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/server/handlers/caller/PullMeasurementSchemaHandlerTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/server/handlers/caller/PullMeasurementSchemaHandlerTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/server/handlers/caller/PullSnapshotHandlerTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/server/handlers/caller/PullSnapshotHandlerTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/server/handlers/caller/PullSnapshotHandlerTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/server/handlers/caller/PullSnapshotHandlerTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/server/handlers/caller/SnapshotCatchUpHandlerTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/server/handlers/caller/SnapshotCatchUpHandlerTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/server/handlers/caller/SnapshotCatchUpHandlerTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/server/handlers/caller/SnapshotCatchUpHandlerTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/server/handlers/forwarder/ForwardPlanHandlerTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/server/handlers/forwarder/ForwardPlanHandlerTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/server/handlers/forwarder/ForwardPlanHandlerTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/server/handlers/forwarder/ForwardPlanHandlerTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/server/heartbeat/DataHeartbeatThreadTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/server/heartbeat/DataHeartbeatThreadTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/server/heartbeat/DataHeartbeatThreadTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/server/heartbeat/DataHeartbeatThreadTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/server/heartbeat/HeartbeatThreadTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/server/heartbeat/HeartbeatThreadTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/server/heartbeat/HeartbeatThreadTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/server/heartbeat/HeartbeatThreadTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/server/heartbeat/MetaHeartbeatThreadTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/server/heartbeat/MetaHeartbeatThreadTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/server/heartbeat/MetaHeartbeatThreadTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/server/heartbeat/MetaHeartbeatThreadTest.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/server/member/BaseMember.java b/cluster/src/test/java/org/apache/iotdb/cluster/server/member/BaseMember.java
similarity index 99%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/server/member/BaseMember.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/server/member/BaseMember.java
index c6037bf..34b803b 100644
--- a/cluster/src/test_back/java/org/apache/iotdb/cluster/server/member/BaseMember.java
+++ b/cluster/src/test/java/org/apache/iotdb/cluster/server/member/BaseMember.java
@@ -242,7 +242,7 @@
           }
 
           @Override
-          public AppendEntryResult appendEntry(AppendEntryRequest request) {
+          public AppendEntryResult appendEntry(AppendEntryRequest request, boolean isVerifier) {
             return new AppendEntryResult(Response.RESPONSE_AGREE);
           }
 
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/server/member/DataGroupMemberTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/server/member/DataGroupMemberTest.java
similarity index 99%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/server/member/DataGroupMemberTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/server/member/DataGroupMemberTest.java
index f517936..00cd99a 100644
--- a/cluster/src/test_back/java/org/apache/iotdb/cluster/server/member/DataGroupMemberTest.java
+++ b/cluster/src/test/java/org/apache/iotdb/cluster/server/member/DataGroupMemberTest.java
@@ -204,7 +204,7 @@
           }
 
           @Override
-          public AppendEntryResult appendEntry(AppendEntryRequest request) {
+          public AppendEntryResult appendEntry(AppendEntryRequest request, boolean isVerifier) {
             return new AppendEntryResult(Response.RESPONSE_AGREE);
           }
 
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/server/member/MetaGroupMemberTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/server/member/MetaGroupMemberTest.java
similarity index 99%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/server/member/MetaGroupMemberTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/server/member/MetaGroupMemberTest.java
index b8c7356..bc31de1 100644
--- a/cluster/src/test_back/java/org/apache/iotdb/cluster/server/member/MetaGroupMemberTest.java
+++ b/cluster/src/test/java/org/apache/iotdb/cluster/server/member/MetaGroupMemberTest.java
@@ -120,7 +120,6 @@
 import org.apache.iotdb.tsfile.write.schema.TimeseriesSchema;
 
 import org.apache.thrift.async.AsyncMethodCallback;
-import org.apache.thrift.protocol.TCompactProtocol.Factory;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
@@ -252,7 +251,8 @@
             } catch (QueryProcessException
                 | StorageGroupNotSetException
                 | StorageEngineException e) {
-              return new ConsensusWriteResponse(new ConsensusException(e.getMessage(), e), StatusUtils.EXECUTE_STATEMENT_ERROR);
+              return new ConsensusWriteResponse(
+                  new ConsensusException(e.getMessage(), e), StatusUtils.EXECUTE_STATEMENT_ERROR);
             }
           }
 
@@ -462,6 +462,7 @@
                 @Override
                 public void appendEntry(
                     AppendEntryRequest request,
+                    boolean isVerifier,
                     AsyncMethodCallback<AppendEntryResult> resultHandler) {
                   new Thread(
                           () -> {
@@ -1114,13 +1115,13 @@
     GenericHandler<AppendEntryResult> handler = new GenericHandler<>(TestUtils.getNode(0), result);
     testMetaMember.setPartitionTable(null);
     testMetaMember.setReady(false);
-    new MetaAsyncService(testMetaMember).appendEntry(request, handler);
+    new MetaAsyncService(testMetaMember).appendEntry(request, false, handler);
     assertEquals(Response.RESPONSE_PARTITION_TABLE_UNAVAILABLE, result.get().status);
     System.out.println("Term after first append: " + testMetaMember.getTerm().get());
 
     testMetaMember.setPartitionTable(partitionTable);
     testMetaMember.setReady(true);
-    new MetaAsyncService(testMetaMember).appendEntry(request, handler);
+    new MetaAsyncService(testMetaMember).appendEntry(request, false, handler);
     System.out.println("Term after second append: " + testMetaMember.getTerm().get());
     assertEquals(Response.RESPONSE_STRONG_ACCEPT, result.get().status);
   }
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/server/member/RaftMemberTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/server/member/RaftMemberTest.java
similarity index 95%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/server/member/RaftMemberTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/server/member/RaftMemberTest.java
index b52cbd5..22aa1ee 100644
--- a/cluster/src/test_back/java/org/apache/iotdb/cluster/server/member/RaftMemberTest.java
+++ b/cluster/src/test/java/org/apache/iotdb/cluster/server/member/RaftMemberTest.java
@@ -84,7 +84,7 @@
         .setConsistencyLevel(ConsistencyLevel.STRONG_CONSISTENCY);
     try {
 
-      PartitionedSnapshotLogManager partitionedSnapshotLogManager =
+      PartitionedSnapshotLogManager<?> partitionedSnapshotLogManager =
           Mockito.mock(PartitionedSnapshotLogManager.class);
       Mockito.when(partitionedSnapshotLogManager.getMaxHaveAppliedCommitIndex()).thenReturn(1000L);
       dataGroupMemberWithWriteStrongConsistencyTrue.setLogManager(partitionedSnapshotLogManager);
@@ -107,7 +107,7 @@
     ClusterDescriptor.getInstance().getConfig().setMaxReadLogLag(1);
     try {
 
-      PartitionedSnapshotLogManager partitionedSnapshotLogManager =
+      PartitionedSnapshotLogManager<?> partitionedSnapshotLogManager =
           Mockito.mock(PartitionedSnapshotLogManager.class);
       Mockito.when(partitionedSnapshotLogManager.getMaxHaveAppliedCommitIndex()).thenReturn(-2L);
       dataGroupMemberWithWriteStrongConsistencyFalse.setLogManager(partitionedSnapshotLogManager);
@@ -130,7 +130,7 @@
     ClusterDescriptor.getInstance().getConfig().setMaxReadLogLag(500);
     try {
 
-      PartitionedSnapshotLogManager partitionedSnapshotLogManager =
+      PartitionedSnapshotLogManager<?> partitionedSnapshotLogManager =
           Mockito.mock(PartitionedSnapshotLogManager.class);
       Mockito.when(partitionedSnapshotLogManager.getMaxHaveAppliedCommitIndex()).thenReturn(600L);
       dataGroupMemberWithWriteStrongConsistencyTrue.setLogManager(partitionedSnapshotLogManager);
@@ -153,7 +153,7 @@
     ClusterDescriptor.getInstance().getConfig().setMaxReadLogLag(1);
     try {
 
-      PartitionedSnapshotLogManager partitionedSnapshotLogManager =
+      PartitionedSnapshotLogManager<?> partitionedSnapshotLogManager =
           Mockito.mock(PartitionedSnapshotLogManager.class);
       Mockito.when(partitionedSnapshotLogManager.getMaxHaveAppliedCommitIndex()).thenReturn(-2L);
       dataGroupMemberWithWriteStrongConsistencyFalse.setLogManager(partitionedSnapshotLogManager);
@@ -175,7 +175,7 @@
     ClusterDescriptor.getInstance().getConfig().setMaxReadLogLag(500);
     try {
 
-      PartitionedSnapshotLogManager partitionedSnapshotLogManager =
+      PartitionedSnapshotLogManager<?> partitionedSnapshotLogManager =
           Mockito.mock(PartitionedSnapshotLogManager.class);
       Mockito.when(partitionedSnapshotLogManager.getMaxHaveAppliedCommitIndex()).thenReturn(600L);
       dataGroupMemberWithWriteStrongConsistencyTrue.setLogManager(partitionedSnapshotLogManager);
@@ -201,7 +201,7 @@
           }
 
           @Override
-          public AppendEntryResult appendEntry(AppendEntryRequest request) {
+          public AppendEntryResult appendEntry(AppendEntryRequest request, boolean isVerifier) {
             return new AppendEntryResult(Response.RESPONSE_AGREE);
           }
 
@@ -238,7 +238,7 @@
           }
 
           @Override
-          public AppendEntryResult appendEntry(AppendEntryRequest request) {
+          public AppendEntryResult appendEntry(AppendEntryRequest request, boolean isVerifier) {
             return new AppendEntryResult(Response.RESPONSE_AGREE);
           }
 
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/utils/Constants.java b/cluster/src/test/java/org/apache/iotdb/cluster/utils/Constants.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/utils/Constants.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/utils/Constants.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/utils/CreateTemplatePlanUtil.java b/cluster/src/test/java/org/apache/iotdb/cluster/utils/CreateTemplatePlanUtil.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/utils/CreateTemplatePlanUtil.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/utils/CreateTemplatePlanUtil.java
diff --git a/cluster/src/test_back/java/org/apache/iotdb/cluster/utils/SerializeUtilTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/utils/SerializeUtilTest.java
similarity index 100%
rename from cluster/src/test_back/java/org/apache/iotdb/cluster/utils/SerializeUtilTest.java
rename to cluster/src/test/java/org/apache/iotdb/cluster/utils/SerializeUtilTest.java
diff --git a/cluster/src/test_back/resources/logback-test.xml b/cluster/src/test/resources/logback-test.xml
similarity index 100%
rename from cluster/src/test_back/resources/logback-test.xml
rename to cluster/src/test/resources/logback-test.xml
diff --git a/cluster/src/test_back/resources/node1conf/iotdb-cluster.properties b/cluster/src/test/resources/node1conf/iotdb-cluster.properties
similarity index 100%
rename from cluster/src/test_back/resources/node1conf/iotdb-cluster.properties
rename to cluster/src/test/resources/node1conf/iotdb-cluster.properties
diff --git a/cluster/src/test_back/resources/node1conf/iotdb-engine.properties b/cluster/src/test/resources/node1conf/iotdb-engine.properties
similarity index 100%
rename from cluster/src/test_back/resources/node1conf/iotdb-engine.properties
rename to cluster/src/test/resources/node1conf/iotdb-engine.properties
diff --git a/cluster/src/test_back/resources/node1conf/iotdb-metric.yml b/cluster/src/test/resources/node1conf/iotdb-metric.yml
similarity index 100%
rename from cluster/src/test_back/resources/node1conf/iotdb-metric.yml
rename to cluster/src/test/resources/node1conf/iotdb-metric.yml
diff --git a/cluster/src/test_back/resources/node1conf/logback.xml b/cluster/src/test/resources/node1conf/logback.xml
similarity index 100%
rename from cluster/src/test_back/resources/node1conf/logback.xml
rename to cluster/src/test/resources/node1conf/logback.xml
diff --git a/cluster/src/test_back/resources/node2conf/iotdb-cluster.properties b/cluster/src/test/resources/node2conf/iotdb-cluster.properties
similarity index 100%
rename from cluster/src/test_back/resources/node2conf/iotdb-cluster.properties
rename to cluster/src/test/resources/node2conf/iotdb-cluster.properties
diff --git a/cluster/src/test_back/resources/node2conf/iotdb-engine.properties b/cluster/src/test/resources/node2conf/iotdb-engine.properties
similarity index 100%
rename from cluster/src/test_back/resources/node2conf/iotdb-engine.properties
rename to cluster/src/test/resources/node2conf/iotdb-engine.properties
diff --git a/cluster/src/test_back/resources/node2conf/iotdb-metric.yml b/cluster/src/test/resources/node2conf/iotdb-metric.yml
similarity index 100%
rename from cluster/src/test_back/resources/node2conf/iotdb-metric.yml
rename to cluster/src/test/resources/node2conf/iotdb-metric.yml
diff --git a/cluster/src/test_back/resources/node2conf/logback.xml b/cluster/src/test/resources/node2conf/logback.xml
similarity index 100%
rename from cluster/src/test_back/resources/node2conf/logback.xml
rename to cluster/src/test/resources/node2conf/logback.xml
diff --git a/cluster/src/test_back/resources/node3conf/iotdb-cluster.properties b/cluster/src/test/resources/node3conf/iotdb-cluster.properties
similarity index 100%
rename from cluster/src/test_back/resources/node3conf/iotdb-cluster.properties
rename to cluster/src/test/resources/node3conf/iotdb-cluster.properties
diff --git a/cluster/src/test_back/resources/node3conf/iotdb-engine.properties b/cluster/src/test/resources/node3conf/iotdb-engine.properties
similarity index 100%
rename from cluster/src/test_back/resources/node3conf/iotdb-engine.properties
rename to cluster/src/test/resources/node3conf/iotdb-engine.properties
diff --git a/cluster/src/test_back/resources/node3conf/iotdb-metric.yml b/cluster/src/test/resources/node3conf/iotdb-metric.yml
similarity index 100%
rename from cluster/src/test_back/resources/node3conf/iotdb-metric.yml
rename to cluster/src/test/resources/node3conf/iotdb-metric.yml
diff --git a/cluster/src/test_back/resources/node3conf/logback.xml b/cluster/src/test/resources/node3conf/logback.xml
similarity index 100%
rename from cluster/src/test_back/resources/node3conf/logback.xml
rename to cluster/src/test/resources/node3conf/logback.xml