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

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


The following commit(s) were added to refs/heads/master by this push:
     new 0e5e2462b45 Optimize region migration log && change region status to 
removing before transferring leader  (#12368)
0e5e2462b45 is described below

commit 0e5e2462b458a2fa6464b4998479a4357f3a9a98
Author: Li Yu Heng <[email protected]>
AuthorDate: Thu Apr 18 19:07:27 2024 +0800

    Optimize region migration log && change region status to removing before 
transferring leader  (#12368)
    
    * improve log
    
    * move leader change && improve log
    
    * use another func
---
 .../pass/IoTDBRegionMigrateClusterCrashIT.java     |  3 +-
 .../pass/IoTDBRegionMigrateConfigNodeCrashIT.java  |  2 +-
 .../procedure/env/RegionMaintainHandler.java       |  9 +----
 .../impl/region/AddRegionPeerProcedure.java        | 46 ++++++++++++++++------
 .../impl/region/RegionMigrateProcedure.java        | 41 ++++++++++---------
 .../impl/region/RemoveRegionPeerProcedure.java     | 39 ++++++++++++++----
 .../procedure/state/RegionTransitionState.java     |  1 -
 .../procedure/state/RemoveRegionPeerState.java     |  1 +
 8 files changed, 89 insertions(+), 53 deletions(-)

diff --git 
a/integration-test/src/test/java/org/apache/iotdb/confignode/it/regionmigration/pass/IoTDBRegionMigrateClusterCrashIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/confignode/it/regionmigration/pass/IoTDBRegionMigrateClusterCrashIT.java
index db8ad76e491..be18a7f54d7 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/confignode/it/regionmigration/pass/IoTDBRegionMigrateClusterCrashIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/confignode/it/regionmigration/pass/IoTDBRegionMigrateClusterCrashIT.java
@@ -21,7 +21,6 @@ package org.apache.iotdb.confignode.it.regionmigration.pass;
 
 import 
org.apache.iotdb.confignode.it.regionmigration.IoTDBRegionMigrateReliabilityITFramework;
 import org.apache.iotdb.confignode.procedure.state.AddRegionPeerState;
-import org.apache.iotdb.confignode.procedure.state.RegionTransitionState;
 import org.apache.iotdb.confignode.procedure.state.RemoveRegionPeerState;
 import org.apache.iotdb.it.framework.IoTDBTestRunner;
 
@@ -48,7 +47,7 @@ public class IoTDBRegionMigrateClusterCrashIT extends 
IoTDBRegionMigrateReliabil
 
   @Test
   public void clusterCrash4() throws Exception {
-    killClusterTest(buildSet(RegionTransitionState.CHANGE_REGION_LEADER), 
true);
+    killClusterTest(buildSet(RemoveRegionPeerState.TRANSFER_REGION_LEADER), 
true);
   }
 
   @Test
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/confignode/it/regionmigration/pass/IoTDBRegionMigrateConfigNodeCrashIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/confignode/it/regionmigration/pass/IoTDBRegionMigrateConfigNodeCrashIT.java
index d9bb2acf2d8..9baeab50877 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/confignode/it/regionmigration/pass/IoTDBRegionMigrateConfigNodeCrashIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/confignode/it/regionmigration/pass/IoTDBRegionMigrateConfigNodeCrashIT.java
@@ -93,7 +93,7 @@ public class IoTDBRegionMigrateConfigNodeCrashIT extends 
IoTDBRegionMigrateRelia
         1,
         1,
         2,
-        buildSet(RegionTransitionState.CHANGE_REGION_LEADER),
+        buildSet(RemoveRegionPeerState.TRANSFER_REGION_LEADER),
         noKillPoints(),
         KillNode.CONFIG_NODE);
   }
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/env/RegionMaintainHandler.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/env/RegionMaintainHandler.java
index cfad4aefa00..5f44c1fdae4 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/env/RegionMaintainHandler.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/env/RegionMaintainHandler.java
@@ -660,20 +660,13 @@ public class RegionMaintainHandler {
    *
    * @param regionId The region to be migrated
    * @param originalDataNode The DataNode where the region locates
-   * @param migrateDestDataNode The DataNode where the region is to be migrated
    */
-  public void changeRegionLeader(
-      TConsensusGroupId regionId,
-      TDataNodeLocation originalDataNode,
-      TDataNodeLocation migrateDestDataNode) {
+  public void changeRegionLeader(TConsensusGroupId regionId, TDataNodeLocation 
originalDataNode) {
     Optional<TDataNodeLocation> newLeaderNode =
         filterDataNodeWithOtherRegionReplica(regionId, originalDataNode);
 
     if (TConsensusGroupType.DataRegion.equals(regionId.getType())
         && IOT_CONSENSUS.equals(CONF.getDataRegionConsensusProtocolClass())) {
-      if (CONF.getDataReplicationFactor() == 1) {
-        newLeaderNode = Optional.of(migrateDestDataNode);
-      }
       if (newLeaderNode.isPresent()) {
         configManager
             .getLoadManager()
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/region/AddRegionPeerProcedure.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/region/AddRegionPeerProcedure.java
index b380c7ca721..24d629c48ba 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/region/AddRegionPeerProcedure.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/region/AddRegionPeerProcedure.java
@@ -24,6 +24,7 @@ import org.apache.iotdb.common.rpc.thrift.TDataNodeLocation;
 import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.cluster.RegionStatus;
 import org.apache.iotdb.commons.exception.runtime.ThriftSerDeException;
+import org.apache.iotdb.commons.utils.CommonDateTimeUtils;
 import org.apache.iotdb.commons.utils.ThriftCommonsSerDeUtils;
 import org.apache.iotdb.confignode.procedure.env.ConfigNodeProcedureEnv;
 import org.apache.iotdb.confignode.procedure.env.RegionMaintainHandler;
@@ -33,6 +34,7 @@ import 
org.apache.iotdb.confignode.procedure.exception.ProcedureYieldException;
 import org.apache.iotdb.confignode.procedure.impl.StateMachineProcedure;
 import org.apache.iotdb.confignode.procedure.state.AddRegionPeerState;
 import org.apache.iotdb.confignode.procedure.store.ProcedureType;
+import org.apache.iotdb.db.utils.DateTimeUtils;
 import org.apache.iotdb.mpp.rpc.thrift.TRegionMigrateResult;
 
 import org.slf4j.Logger;
@@ -85,6 +87,11 @@ public class AddRegionPeerProcedure
       outerSwitch:
       switch (state) {
         case CREATE_NEW_REGION_PEER:
+          LOGGER.info(
+              "[pid{}][AddRegion] started, region {} will be added to DataNode 
{}.",
+              getProcId(),
+              consensusGroupId.getId(),
+              destDataNode.getDataNodeId());
           handler.addRegionLocation(consensusGroupId, destDataNode, 
RegionStatus.Adding);
           TSStatus status = handler.createNewRegionPeer(consensusGroupId, 
destDataNode);
           setKillPoint(state);
@@ -102,7 +109,10 @@ public class AddRegionPeerProcedure
                     this.getProcId(), destDataNode, consensusGroupId, 
coordinator);
             setKillPoint(state);
             if (tsStatus.getCode() != SUCCESS_STATUS.getStatusCode()) {
-              throw new ProcedureException("ADD_REGION_PEER executed failed in 
DataNode");
+              throw new ProcedureException(
+                  String.format(
+                      "[pid%d][AddRegion] failed to submit task to DataNode, 
procedure failed",
+                      getProcId()));
             }
           }
           TRegionMigrateResult result = 
handler.waitTaskFinish(this.getProcId(), coordinator);
@@ -112,7 +122,8 @@ public class AddRegionPeerProcedure
             case FAIL:
               // maybe some DataNode crash
               LOGGER.warn(
-                  "{} result is {}, procedure failed. Will try to reset peer 
list automatically...",
+                  "[pid{}][AddRegion] {} result is {}, procedure failed. Will 
try to reset peer list automatically...",
+                  getProcId(),
                   state,
                   result.getTaskStatus());
               rollback(env, handler);
@@ -132,31 +143,39 @@ public class AddRegionPeerProcedure
         case UPDATE_REGION_LOCATION_CACHE:
           handler.updateRegionCache(consensusGroupId, destDataNode, 
RegionStatus.Running);
           setKillPoint(state);
-          LOGGER.info("AddRegionPeer state {} complete", state);
+          LOGGER.info("[pid{}][AddRegion] state {} complete", getProcId(), 
state);
           LOGGER.info(
-              "AddRegionPeerProcedure success, region {} has been added to 
DataNode {}",
+              "[pid{}][AddRegion] success, region {} has been added to 
DataNode {}. Procedure took {} (start at {}).",
+              getProcId(),
               consensusGroupId.getId(),
-              destDataNode.getDataNodeId());
+              destDataNode.getDataNodeId(),
+              CommonDateTimeUtils.convertMillisecondToDurationStr(
+                  System.currentTimeMillis() - getSubmittedTime()),
+              DateTimeUtils.convertLongToDate(getSubmittedTime(), "ms"));
           return Flow.NO_MORE_STATE;
         default:
           throw new ProcedureException("Unsupported state: " + state.name());
       }
     } catch (Exception e) {
-      LOGGER.error("AddRegionPeer state {} failed", state, e);
+      LOGGER.error("[pid{}][AddRegion] state {} failed", getProcId(), state, 
e);
       return Flow.NO_MORE_STATE;
     }
-    LOGGER.info("AddRegionPeer state {} complete", state);
+    LOGGER.info("[pid{}][AddRegion] state {} complete", getProcId(), state);
     return Flow.HAS_MORE_STATE;
   }
 
-  private void rollback(ConfigNodeProcedureEnv env, RegionMaintainHandler 
handler) {
+  private void rollback(ConfigNodeProcedureEnv env, RegionMaintainHandler 
handler)
+      throws ProcedureException {
     handler.removeRegionLocation(consensusGroupId, destDataNode);
 
     List<TDataNodeLocation> correctDataNodeLocations =
         
env.getConfigManager().getPartitionManager().getAllReplicaSets().stream()
             .filter(tRegionReplicaSet -> 
tRegionReplicaSet.getRegionId().equals(consensusGroupId))
             .findAny()
-            .get()
+            .orElseThrow(
+                () ->
+                    new ProcedureException(
+                        "Cannot roll back, because cannot find the correct 
locations"))
             .getDataNodeLocations();
 
     String correctStr =
@@ -170,7 +189,8 @@ public class AddRegionPeerProcedure
     relatedDataNodeLocations.forEach(
         location -> relatedDataNodeLocationMap.put(location.dataNodeId, 
location));
     LOGGER.info(
-        "Will reset peer list of consensus group {} on DataNode {}",
+        "[pid{}][AddRegion] Will reset peer list of consensus group {} on 
DataNode {}",
+        getProcId(),
         consensusGroupId,
         relatedDataNodeLocations.stream()
             .map(TDataNodeLocation::getDataNodeId)
@@ -184,14 +204,16 @@ public class AddRegionPeerProcedure
         (dataNodeId, resetResult) -> {
           if (resetResult.getCode() == SUCCESS_STATUS.getStatusCode()) {
             LOGGER.info(
-                "reset peer list: peer list of consensus group {} on DataNode 
{} has been successfully to {}",
+                "[pid{}][AddRegion] reset peer list: peer list of consensus 
group {} on DataNode {} has been successfully to {}",
+                getProcId(),
                 consensusGroupId,
                 dataNodeId,
                 correctStr);
           } else {
             // TODO: more precise
             LOGGER.warn(
-                "reset peer list: peer list of consensus group {} on DataNode 
{} failed to reset to {}, you may manually reset it",
+                "[pid{}][AddRegion] reset peer list: peer list of consensus 
group {} on DataNode {} failed to reset to {}, you may manually reset it",
+                getProcId(),
                 consensusGroupId,
                 dataNodeId,
                 correctStr);
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/region/RegionMigrateProcedure.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/region/RegionMigrateProcedure.java
index 7823a6dc826..62045592d5a 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/region/RegionMigrateProcedure.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/region/RegionMigrateProcedure.java
@@ -22,7 +22,7 @@ package org.apache.iotdb.confignode.procedure.impl.region;
 import org.apache.iotdb.common.rpc.thrift.TConsensusGroupId;
 import org.apache.iotdb.common.rpc.thrift.TDataNodeLocation;
 import org.apache.iotdb.commons.exception.runtime.ThriftSerDeException;
-import org.apache.iotdb.commons.utils.KillPoint.KillPoint;
+import org.apache.iotdb.commons.utils.CommonDateTimeUtils;
 import org.apache.iotdb.commons.utils.ThriftCommonsSerDeUtils;
 import org.apache.iotdb.confignode.procedure.env.ConfigNodeProcedureEnv;
 import org.apache.iotdb.confignode.procedure.env.RegionMaintainHandler;
@@ -31,6 +31,7 @@ import 
org.apache.iotdb.confignode.procedure.impl.StateMachineProcedure;
 import org.apache.iotdb.confignode.procedure.state.ProcedureLockState;
 import org.apache.iotdb.confignode.procedure.state.RegionTransitionState;
 import org.apache.iotdb.confignode.procedure.store.ProcedureType;
+import org.apache.iotdb.db.utils.DateTimeUtils;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -45,7 +46,6 @@ public class RegionMigrateProcedure
     extends StateMachineProcedure<ConfigNodeProcedureEnv, 
RegionTransitionState> {
 
   private static final Logger LOGGER = 
LoggerFactory.getLogger(RegionMigrateProcedure.class);
-  private static final int RETRY_THRESHOLD = 5;
 
   /** Wait region migrate finished */
   private TConsensusGroupId consensusGroupId;
@@ -55,8 +55,6 @@ public class RegionMigrateProcedure
   private TDataNodeLocation coordinatorForAddPeer;
   private TDataNodeLocation coordinatorForRemovePeer;
 
-  private String migrateResult = "";
-
   public RegionMigrateProcedure() {
     super();
   }
@@ -84,6 +82,12 @@ public class RegionMigrateProcedure
     try {
       switch (state) {
         case REGION_MIGRATE_PREPARE:
+          LOGGER.info(
+              "[pid{}][MigrateRegion] started, region {} will be migrated from 
DataNode {} to {}.",
+              getProcId(),
+              consensusGroupId.getId(),
+              originalDataNode.getDataNodeId(),
+              destDataNode.getDataNodeId());
           setNextState(RegionTransitionState.ADD_REGION_PEER);
           break;
         case ADD_REGION_PEER:
@@ -96,15 +100,10 @@ public class RegionMigrateProcedure
               .getPartitionManager()
               .isDataNodeContainsRegion(destDataNode.getDataNodeId(), 
consensusGroupId)) {
             LOGGER.warn(
-                "sub-procedure AddRegionPeerProcedure fail, 
RegionMigrateProcedure will not continue");
+                "[pid{}][MigrateRegion] sub-procedure AddRegionPeerProcedure 
fail, RegionMigrateProcedure will not continue",
+                getProcId());
             return Flow.NO_MORE_STATE;
           }
-          LOGGER.info("sub-procedure AddRegionPeerProcedure success");
-          setNextState(RegionTransitionState.CHANGE_REGION_LEADER);
-          break;
-        case CHANGE_REGION_LEADER:
-          handler.changeRegionLeader(consensusGroupId, originalDataNode, 
destDataNode);
-          KillPoint.setKillPoint(state);
           setNextState(RegionTransitionState.REMOVE_REGION_PEER);
           break;
         case REMOVE_REGION_PEER:
@@ -118,24 +117,29 @@ public class RegionMigrateProcedure
               .getPartitionManager()
               .isDataNodeContainsRegion(originalDataNode.getDataNodeId(), 
consensusGroupId)) {
             LOGGER.warn(
-                "RegionMigrateProcedure success, but you may need to manually 
clean the old region to make everything works fine");
+                "[pid{}][MigrateRegion] success, but you may need to manually 
clean the old region to make everything works fine",
+                getProcId());
           } else {
             LOGGER.info(
-                "RegionMigrateProcedure success, region {} has been migrated 
from DataNode {} to {}",
+                "[pid{}][MigrateRegion] success, region {} has been migrated 
from DataNode {} to {}. Procedure took {} (started at {})",
+                getProcId(),
                 consensusGroupId.getId(),
                 originalDataNode.getDataNodeId(),
-                destDataNode.getDataNodeId());
+                destDataNode.getDataNodeId(),
+                CommonDateTimeUtils.convertMillisecondToDurationStr(
+                    System.currentTimeMillis() - getSubmittedTime()),
+                DateTimeUtils.convertLongToDate(getSubmittedTime(), "ms"));
           }
           return Flow.NO_MORE_STATE;
         default:
           throw new ProcedureException("Unsupported state: " + state.name());
       }
     } catch (Exception e) {
-      LOGGER.error("RegionMigrateProcedure state {} fail", state, e);
+      LOGGER.error("[pid{}][MigrateRegion] state {} fail", getProcId(), state, 
e);
       // meets exception in region migrate process terminate the process
       return Flow.NO_MORE_STATE;
     }
-    LOGGER.info("RegionMigrateProcedure state {} complete", state);
+    LOGGER.info("[pid{}][MigrateRegion] state {} complete", getProcId(), 
state);
     return Flow.HAS_MORE_STATE;
   }
 
@@ -143,11 +147,6 @@ public class RegionMigrateProcedure
   protected void rollbackState(ConfigNodeProcedureEnv env, 
RegionTransitionState state)
       throws IOException, InterruptedException, ProcedureException {}
 
-  @Override
-  protected boolean isRollbackSupported(RegionTransitionState state) {
-    return false;
-  }
-
   @Override
   protected ProcedureLockState acquireLock(ConfigNodeProcedureEnv 
configNodeProcedureEnv) {
     configNodeProcedureEnv.getSchedulerLock().lock();
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/region/RemoveRegionPeerProcedure.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/region/RemoveRegionPeerProcedure.java
index ef3a58994bd..e459161ca90 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/region/RemoveRegionPeerProcedure.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/region/RemoveRegionPeerProcedure.java
@@ -25,6 +25,8 @@ import 
org.apache.iotdb.common.rpc.thrift.TRegionMaintainTaskStatus;
 import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.cluster.RegionStatus;
 import org.apache.iotdb.commons.exception.runtime.ThriftSerDeException;
+import org.apache.iotdb.commons.utils.CommonDateTimeUtils;
+import org.apache.iotdb.commons.utils.KillPoint.KillPoint;
 import org.apache.iotdb.commons.utils.ThriftCommonsSerDeUtils;
 import org.apache.iotdb.confignode.procedure.env.ConfigNodeProcedureEnv;
 import org.apache.iotdb.confignode.procedure.env.RegionMaintainHandler;
@@ -34,6 +36,7 @@ import 
org.apache.iotdb.confignode.procedure.exception.ProcedureYieldException;
 import org.apache.iotdb.confignode.procedure.impl.StateMachineProcedure;
 import org.apache.iotdb.confignode.procedure.state.RemoveRegionPeerState;
 import org.apache.iotdb.confignode.procedure.store.ProcedureType;
+import org.apache.iotdb.db.utils.DateTimeUtils;
 import org.apache.iotdb.mpp.rpc.thrift.TRegionMigrateResult;
 
 import org.slf4j.Logger;
@@ -46,6 +49,7 @@ import java.nio.ByteBuffer;
 import static org.apache.iotdb.commons.utils.KillPoint.KillPoint.setKillPoint;
 import static 
org.apache.iotdb.confignode.procedure.state.RemoveRegionPeerState.DELETE_OLD_REGION_PEER;
 import static 
org.apache.iotdb.confignode.procedure.state.RemoveRegionPeerState.REMOVE_REGION_LOCATION_CACHE;
+import static 
org.apache.iotdb.confignode.procedure.state.RemoveRegionPeerState.REMOVE_REGION_PEER;
 import static org.apache.iotdb.rpc.TSStatusCode.SUCCESS_STATUS;
 
 public class RemoveRegionPeerProcedure
@@ -79,6 +83,17 @@ public class RemoveRegionPeerProcedure
     RegionMaintainHandler handler = env.getRegionMaintainHandler();
     try {
       switch (state) {
+        case TRANSFER_REGION_LEADER:
+          LOGGER.info(
+              "[pid{}][RemoveRegion] started, region {} will be removed from 
DataNode {}.",
+              getProcId(),
+              consensusGroupId.getId(),
+              targetDataNode.getDataNodeId());
+          handler.updateRegionCache(consensusGroupId, targetDataNode, 
RegionStatus.Removing);
+          handler.changeRegionLeader(consensusGroupId, targetDataNode);
+          KillPoint.setKillPoint(state);
+          setNextState(REMOVE_REGION_PEER);
+          break;
         case REMOVE_REGION_PEER:
           handler.updateRegionCache(consensusGroupId, targetDataNode, 
RegionStatus.Removing);
           tsStatus =
@@ -87,7 +102,8 @@ public class RemoveRegionPeerProcedure
           setKillPoint(state);
           if (tsStatus.getCode() != SUCCESS_STATUS.getStatusCode()) {
             LOGGER.warn(
-                "{} task submitted failed, procedure will continue. You should 
manually clear peer list.",
+                "[pid{}][RemoveRegion] {} task submitted failed, procedure 
will continue. You should manually clear peer list.",
+                getProcId(),
                 state);
             setNextState(DELETE_OLD_REGION_PEER);
             break;
@@ -96,7 +112,8 @@ public class RemoveRegionPeerProcedure
               handler.waitTaskFinish(this.getProcId(), coordinator);
           if (removeRegionPeerResult.getTaskStatus() != 
TRegionMaintainTaskStatus.SUCCESS) {
             LOGGER.warn(
-                "{} executed failed, procedure will continue. You should 
manually clear peer list.",
+                "[pid{}][RemoveRegion] {} executed failed, procedure will 
continue. You should manually clear peer list.",
+                getProcId(),
                 state);
           }
           setNextState(DELETE_OLD_REGION_PEER);
@@ -109,7 +126,8 @@ public class RemoveRegionPeerProcedure
           setKillPoint(state);
           if (tsStatus.getCode() != SUCCESS_STATUS.getStatusCode()) {
             LOGGER.warn(
-                "DELETE_OLD_REGION_PEER task submitted failed, procedure will 
continue. You should manually delete region file.");
+                "[pid{}][RemoveRegion] DELETE_OLD_REGION_PEER task submitted 
failed, procedure will continue. You should manually delete region file.",
+                getProcId());
             setNextState(REMOVE_REGION_LOCATION_CACHE);
             break;
           }
@@ -117,7 +135,8 @@ public class RemoveRegionPeerProcedure
               handler.waitTaskFinish(this.getProcId(), targetDataNode);
           if (deleteOldRegionPeerResult.getTaskStatus() != 
TRegionMaintainTaskStatus.SUCCESS) {
             LOGGER.warn(
-                "DELETE_OLD_REGION_PEER executed failed, procedure will 
continue. You should manually delete region file.");
+                "[pid{}][RemoveRegion] DELETE_OLD_REGION_PEER executed failed, 
procedure will continue. You should manually delete region file.",
+                getProcId());
           }
           setNextState(REMOVE_REGION_LOCATION_CACHE);
           break;
@@ -126,9 +145,13 @@ public class RemoveRegionPeerProcedure
           setKillPoint(state);
           LOGGER.info("RemoveRegionPeer state {} success", state);
           LOGGER.info(
-              "RemoveRegionPeerProcedure success, region {} has been removed 
from DataNode {}",
+              "[pid{}][RemoveRegion] success, region {} has been removed from 
DataNode {}. Procedure took {} (started at {})",
+              getProcId(),
               consensusGroupId.getId(),
-              targetDataNode.getDataNodeId());
+              targetDataNode.getDataNodeId(),
+              CommonDateTimeUtils.convertMillisecondToDurationStr(
+                  System.currentTimeMillis() - getSubmittedTime()),
+              DateTimeUtils.convertLongToDate(getSubmittedTime(), "ms"));
           return Flow.NO_MORE_STATE;
         default:
           throw new ProcedureException("Unsupported state: " + state.name());
@@ -137,7 +160,7 @@ public class RemoveRegionPeerProcedure
       LOGGER.error("RemoveRegionPeer state {} failed", state, e);
       return Flow.NO_MORE_STATE;
     }
-    LOGGER.info("RemoveRegionPeer state {} success", state);
+    LOGGER.info("[pid{}][RemoveRegion] state {} success", getProcId(), state);
     return Flow.HAS_MORE_STATE;
   }
 
@@ -157,7 +180,7 @@ public class RemoveRegionPeerProcedure
 
   @Override
   protected RemoveRegionPeerState getInitialState() {
-    return RemoveRegionPeerState.REMOVE_REGION_PEER;
+    return RemoveRegionPeerState.TRANSFER_REGION_LEADER;
   }
 
   @Override
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/state/RegionTransitionState.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/state/RegionTransitionState.java
index 5c8f7bf8c57..a58bb821228 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/state/RegionTransitionState.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/state/RegionTransitionState.java
@@ -23,7 +23,6 @@ public enum RegionTransitionState {
   REGION_MIGRATE_PREPARE,
   ADD_REGION_PEER,
   CHECK_ADD_REGION_PEER,
-  CHANGE_REGION_LEADER,
   REMOVE_REGION_PEER,
   CHECK_REMOVE_REGION_PEER,
 }
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/state/RemoveRegionPeerState.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/state/RemoveRegionPeerState.java
index f4b9002193a..e9767972799 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/state/RemoveRegionPeerState.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/state/RemoveRegionPeerState.java
@@ -20,6 +20,7 @@
 package org.apache.iotdb.confignode.procedure.state;
 
 public enum RemoveRegionPeerState {
+  TRANSFER_REGION_LEADER,
   REMOVE_REGION_PEER,
   DELETE_OLD_REGION_PEER,
   REMOVE_REGION_LOCATION_CACHE,

Reply via email to