You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ca...@apache.org on 2022/11/16 08:07:39 UTC
[iotdb] branch master updated: [IOTDB-4401] DataNode should not be stopped when any regions are migrated failed (#7997)
This is an automated email from the ASF dual-hosted git repository.
caogaofei 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 e7a4838e0d [IOTDB-4401] DataNode should not be stopped when any regions are migrated failed (#7997)
e7a4838e0d is described below
commit e7a4838e0d8d1e77218ec23489734e225717bb06
Author: Beyyes <cg...@foxmail.com>
AuthorDate: Wed Nov 16 16:07:33 2022 +0800
[IOTDB-4401] DataNode should not be stopped when any regions are migrated failed (#7997)
---
.../iotdb/confignode/manager/ProcedureManager.java | 2 +-
.../iotdb/confignode/manager/node/NodeManager.java | 11 +-
.../procedure/env/DataNodeRemoveHandler.java | 16 +--
.../impl/node/RemoveDataNodeProcedure.java | 120 ++++++++++++---------
.../impl/statemachine/RegionMigrateProcedure.java | 7 +-
.../iotdb/db/service/RegionMigrateService.java | 55 ++++++----
6 files changed, 123 insertions(+), 88 deletions(-)
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java b/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java
index 4deef73d26..79ecc64828 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java
@@ -326,7 +326,7 @@ public class ProcedureManager {
.forEach(
tDataNodeLocation -> {
this.executor.submitProcedure(new RemoveDataNodeProcedure(tDataNodeLocation));
- LOGGER.info("Submit to remove data node procedure, {}", tDataNodeLocation);
+ LOGGER.info("Submit RemoveDataNodeProcedure successfully, {}", tDataNodeLocation);
});
return true;
}
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/NodeManager.java b/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/NodeManager.java
index 4ab6d57051..edb8ce0e23 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/NodeManager.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/NodeManager.java
@@ -279,14 +279,14 @@ public class NodeManager {
dataNodeRemoveHandler.checkRemoveDataNodeRequest(removeDataNodePlan);
if (preCheckStatus.getStatus().getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
LOGGER.error(
- "The remove DataNode request check failed. req: {}, check result: {}",
+ "The remove DataNode request check failed. req: {}, check result: {}",
removeDataNodePlan,
preCheckStatus.getStatus());
return preCheckStatus;
}
+ // Do transfer of the DataNodes before remove
DataNodeToStatusResp dataSet = new DataNodeToStatusResp();
- // do transfer of the DataNodes before remove
if (configManager.transfer(removeDataNodePlan.getDataNodeLocations()).getCode()
!= TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
dataSet.setStatus(
@@ -294,7 +294,8 @@ public class NodeManager {
.setMessage("Fail to do transfer of the DataNodes"));
return dataSet;
}
- // if add request to queue, then return to client
+
+ // Add request to queue, then return to client
boolean registerSucceed =
configManager.getProcedureManager().removeDataNode(removeDataNodePlan);
TSStatus status;
@@ -307,7 +308,9 @@ public class NodeManager {
}
dataSet.setStatus(status);
- LOGGER.info("NodeManager finished to remove DataNode {}", removeDataNodePlan);
+ LOGGER.info(
+ "NodeManager submit RemoveDataNodePlan finished, removeDataNodePlan: {}",
+ removeDataNodePlan);
return dataSet;
}
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/procedure/env/DataNodeRemoveHandler.java b/confignode/src/main/java/org/apache/iotdb/confignode/procedure/env/DataNodeRemoveHandler.java
index 6660c0c080..b802fdcc50 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/procedure/env/DataNodeRemoveHandler.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/procedure/env/DataNodeRemoveHandler.java
@@ -77,15 +77,15 @@ public class DataNodeRemoveHandler {
/**
* Get all consensus group id in this node
*
- * @param dataNodeLocation data node location
- * @return group id list
+ * @param removedDataNode the DataNode to be removed
+ * @return group id list to be migrated
*/
- public List<TConsensusGroupId> getDataNodeRegionIds(TDataNodeLocation dataNodeLocation) {
+ public List<TConsensusGroupId> getMigratedDataNodeRegions(TDataNodeLocation removedDataNode) {
return configManager.getPartitionManager().getAllReplicaSets().stream()
.filter(
- rg ->
- rg.getDataNodeLocations().contains(dataNodeLocation)
- && rg.regionId.getType() != TConsensusGroupType.ConfigNodeRegion)
+ replicaSet ->
+ replicaSet.getDataNodeLocations().contains(removedDataNode)
+ && replicaSet.regionId.getType() != TConsensusGroupType.ConfigNodeRegion)
.map(TRegionReplicaSet::getRegionId)
.collect(Collectors.toList());
}
@@ -292,10 +292,10 @@ public class DataNodeRemoveHandler {
maintainPeerReq,
DataNodeRequestType.REMOVE_REGION_PEER);
LOGGER.info(
- "{}, Send action removeRegionPeer finished, regionId: {}, dataNode: {}",
+ "{}, Send action removeRegionPeer finished, regionId: {}, rpcDataNode: {}",
REMOVE_DATANODE_PROCESS,
regionId,
- rpcClientDataNode.getInternalEndPoint());
+ getIdWithRpcEndpoint(rpcClientDataNode));
return status;
}
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/node/RemoveDataNodeProcedure.java b/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/node/RemoveDataNodeProcedure.java
index 3380aa3c18..fc432bb966 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/node/RemoveDataNodeProcedure.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/node/RemoveDataNodeProcedure.java
@@ -21,9 +21,11 @@ package org.apache.iotdb.confignode.procedure.impl.node;
import org.apache.iotdb.common.rpc.thrift.TConsensusGroupId;
import org.apache.iotdb.common.rpc.thrift.TDataNodeLocation;
+import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
import org.apache.iotdb.commons.exception.runtime.ThriftSerDeException;
import org.apache.iotdb.commons.utils.ThriftCommonsSerDeUtils;
import org.apache.iotdb.confignode.procedure.env.ConfigNodeProcedureEnv;
+import org.apache.iotdb.confignode.procedure.env.DataNodeRemoveHandler;
import org.apache.iotdb.confignode.procedure.exception.ProcedureException;
import org.apache.iotdb.confignode.procedure.impl.statemachine.RegionMigrateProcedure;
import org.apache.iotdb.confignode.procedure.state.RemoveDataNodeState;
@@ -37,6 +39,7 @@ import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
+import java.util.stream.Collectors;
import static org.apache.iotdb.confignode.conf.ConfigNodeConstant.REMOVE_DATANODE_PROCESS;
@@ -45,24 +48,26 @@ public class RemoveDataNodeProcedure extends AbstractNodeProcedure<RemoveDataNod
private static final Logger LOG = LoggerFactory.getLogger(RemoveDataNodeProcedure.class);
private static final int RETRY_THRESHOLD = 5;
- private TDataNodeLocation disableDataNodeLocation;
+ private TDataNodeLocation removedDataNode;
- private List<TConsensusGroupId> execDataNodeRegionIds = new ArrayList<>();
+ private List<TConsensusGroupId> migratedDataNodeRegions = new ArrayList<>();
public RemoveDataNodeProcedure() {
super();
}
- public RemoveDataNodeProcedure(TDataNodeLocation disableDataNodeLocation) {
+ public RemoveDataNodeProcedure(TDataNodeLocation removedDataNode) {
super();
- this.disableDataNodeLocation = disableDataNodeLocation;
+ this.removedDataNode = removedDataNode;
}
@Override
protected Flow executeFromState(ConfigNodeProcedureEnv env, RemoveDataNodeState state) {
- if (disableDataNodeLocation == null) {
+ if (removedDataNode == null) {
return Flow.NO_MORE_STATE;
}
+
+ DataNodeRemoveHandler handler = env.getDataNodeRemoveHandler();
try {
switch (state) {
case REGION_REPLICA_CHECK:
@@ -70,24 +75,24 @@ public class RemoveDataNodeProcedure extends AbstractNodeProcedure<RemoveDataNod
setNextState(RemoveDataNodeState.REMOVE_DATA_NODE_PREPARE);
} else {
LOG.error(
- "{}, Can not remove DataNode {} because the number of DataNodes is less or equal than region replica number",
+ "{}, Can not remove DataNode {} "
+ + "because the number of DataNodes is less or equal than region replica number",
REMOVE_DATANODE_PROCESS,
- disableDataNodeLocation);
+ removedDataNode);
return Flow.NO_MORE_STATE;
}
case REMOVE_DATA_NODE_PREPARE:
// mark the datanode as removing status and broadcast region route map
- env.markDataNodeAsRemovingAndBroadcast(disableDataNodeLocation);
- execDataNodeRegionIds =
- env.getDataNodeRemoveHandler().getDataNodeRegionIds(disableDataNodeLocation);
+ env.markDataNodeAsRemovingAndBroadcast(removedDataNode);
+ migratedDataNodeRegions = handler.getMigratedDataNodeRegions(removedDataNode);
LOG.info(
"{}, DataNode regions to be removed is {}",
REMOVE_DATANODE_PROCESS,
- execDataNodeRegionIds);
+ migratedDataNodeRegions);
setNextState(RemoveDataNodeState.BROADCAST_DISABLE_DATA_NODE);
break;
case BROADCAST_DISABLE_DATA_NODE:
- env.getDataNodeRemoveHandler().broadcastDisableDataNode(disableDataNodeLocation);
+ handler.broadcastDisableDataNode(removedDataNode);
setNextState(RemoveDataNodeState.SUBMIT_REGION_MIGRATE);
break;
case SUBMIT_REGION_MIGRATE:
@@ -95,11 +100,11 @@ public class RemoveDataNodeProcedure extends AbstractNodeProcedure<RemoveDataNod
setNextState(RemoveDataNodeState.STOP_DATA_NODE);
break;
case STOP_DATA_NODE:
- // TODO if region migrate is failed, don't execute STOP_DATA_NODE
- LOG.info(
- "{}, Begin to stop DataNode: {}", REMOVE_DATANODE_PROCESS, disableDataNodeLocation);
- env.getDataNodeRemoveHandler().removeDataNodePersistence(disableDataNodeLocation);
- env.getDataNodeRemoveHandler().stopDataNode(disableDataNodeLocation);
+ if (isAllRegionMigratedSuccessfully(env)) {
+ LOG.info("{}, Begin to stop DataNode: {}", REMOVE_DATANODE_PROCESS, removedDataNode);
+ handler.removeDataNodePersistence(removedDataNode);
+ handler.stopDataNode(removedDataNode);
+ }
return Flow.NO_MORE_STATE;
}
} catch (Exception e) {
@@ -107,10 +112,7 @@ public class RemoveDataNodeProcedure extends AbstractNodeProcedure<RemoveDataNod
setFailure(new ProcedureException("Remove Data Node failed " + state));
} else {
LOG.error(
- "Retrievable error trying to remove data node {}, state {}",
- disableDataNodeLocation,
- state,
- e);
+ "Retrievable error trying to remove data node {}, state {}", removedDataNode, state, e);
if (getCycles() > RETRY_THRESHOLD) {
setFailure(new ProcedureException("State stuck at " + state));
}
@@ -119,6 +121,46 @@ public class RemoveDataNodeProcedure extends AbstractNodeProcedure<RemoveDataNod
return Flow.HAS_MORE_STATE;
}
+ private void submitChildRegionMigrate(ConfigNodeProcedureEnv env) {
+ migratedDataNodeRegions.forEach(
+ regionId -> {
+ TDataNodeLocation destDataNode =
+ env.getDataNodeRemoveHandler().findDestDataNode(regionId);
+ if (destDataNode != null) {
+ RegionMigrateProcedure regionMigrateProcedure =
+ new RegionMigrateProcedure(regionId, removedDataNode, destDataNode);
+ addChildProcedure(regionMigrateProcedure);
+ LOG.info("Submit child procedure {} for regionId {}", regionMigrateProcedure, regionId);
+ } else {
+ LOG.error(
+ "{}, Cannot find target DataNode to migrate the region: {}",
+ REMOVE_DATANODE_PROCESS,
+ regionId);
+ // TODO terminate all the uncompleted remove datanode process
+ }
+ });
+ }
+
+ private boolean isAllRegionMigratedSuccessfully(ConfigNodeProcedureEnv env) {
+ List<TRegionReplicaSet> replicaSets =
+ env.getConfigManager().getPartitionManager().getAllReplicaSets();
+
+ List<TConsensusGroupId> migratedFailedRegions =
+ replicaSets.stream()
+ .filter(replica -> replica.getDataNodeLocations().contains(removedDataNode))
+ .map(TRegionReplicaSet::getRegionId)
+ .collect(Collectors.toList());
+ if (migratedFailedRegions.size() > 0) {
+ LOG.warn(
+ "{}, Some regions are migrated failed, the StopDataNode process should not be executed, migratedFailedRegions: {}",
+ REMOVE_DATANODE_PROCESS,
+ migratedFailedRegions);
+ return false;
+ }
+
+ return true;
+ }
+
@Override
protected void rollbackState(ConfigNodeProcedureEnv env, RemoveDataNodeState state)
throws IOException, InterruptedException, ProcedureException {}
@@ -157,9 +199,9 @@ public class RemoveDataNodeProcedure extends AbstractNodeProcedure<RemoveDataNod
public void serialize(DataOutputStream stream) throws IOException {
stream.writeShort(ProcedureType.REMOVE_DATA_NODE_PROCEDURE.getTypeCode());
super.serialize(stream);
- ThriftCommonsSerDeUtils.serializeTDataNodeLocation(disableDataNodeLocation, stream);
- stream.writeInt(execDataNodeRegionIds.size());
- execDataNodeRegionIds.forEach(
+ ThriftCommonsSerDeUtils.serializeTDataNodeLocation(removedDataNode, stream);
+ stream.writeInt(migratedDataNodeRegions.size());
+ migratedDataNodeRegions.forEach(
tid -> ThriftCommonsSerDeUtils.serializeTConsensusGroupId(tid, stream));
}
@@ -167,11 +209,12 @@ public class RemoveDataNodeProcedure extends AbstractNodeProcedure<RemoveDataNod
public void deserialize(ByteBuffer byteBuffer) {
super.deserialize(byteBuffer);
try {
- disableDataNodeLocation = ThriftCommonsSerDeUtils.deserializeTDataNodeLocation(byteBuffer);
+ removedDataNode = ThriftCommonsSerDeUtils.deserializeTDataNodeLocation(byteBuffer);
int regionSize = byteBuffer.getInt();
- execDataNodeRegionIds = new ArrayList<>(regionSize);
+ migratedDataNodeRegions = new ArrayList<>(regionSize);
for (int i = 0; i < regionSize; i++) {
- execDataNodeRegionIds.add(ThriftCommonsSerDeUtils.deserializeTConsensusGroupId(byteBuffer));
+ migratedDataNodeRegions.add(
+ ThriftCommonsSerDeUtils.deserializeTConsensusGroupId(byteBuffer));
}
} catch (ThriftSerDeException e) {
LOG.error("Error in deserialize RemoveConfigNodeProcedure", e);
@@ -184,28 +227,9 @@ public class RemoveDataNodeProcedure extends AbstractNodeProcedure<RemoveDataNod
RemoveDataNodeProcedure thatProc = (RemoveDataNodeProcedure) that;
return thatProc.getProcId() == this.getProcId()
&& thatProc.getState() == this.getState()
- && thatProc.disableDataNodeLocation.equals(this.disableDataNodeLocation);
+ && thatProc.removedDataNode.equals(this.removedDataNode)
+ && thatProc.migratedDataNodeRegions.equals(this.migratedDataNodeRegions);
}
return false;
}
-
- private void submitChildRegionMigrate(ConfigNodeProcedureEnv env) {
- execDataNodeRegionIds.forEach(
- regionId -> {
- TDataNodeLocation destDataNode =
- env.getDataNodeRemoveHandler().findDestDataNode(regionId);
- if (destDataNode != null) {
- RegionMigrateProcedure regionMigrateProcedure =
- new RegionMigrateProcedure(regionId, disableDataNodeLocation, destDataNode);
- addChildProcedure(regionMigrateProcedure);
- LOG.info("Submit child procedure {} for regionId {}", regionMigrateProcedure, regionId);
- } else {
- LOG.error(
- "{}, Cannot find target DataNode to remove the region: {}",
- REMOVE_DATANODE_PROCESS,
- regionId);
- // TODO terminate all the uncompleted remove datanode process
- }
- });
- }
}
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/statemachine/RegionMigrateProcedure.java b/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/statemachine/RegionMigrateProcedure.java
index f15ed67489..07a498c7a1 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/statemachine/RegionMigrateProcedure.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/statemachine/RegionMigrateProcedure.java
@@ -98,7 +98,7 @@ public class RegionMigrateProcedure
if (tsStatus.getCode() == SUCCESS_STATUS.getStatusCode()) {
waitForOneMigrationStepFinished(consensusGroupId, state);
} else {
- throw new ProcedureException("Failed to add region peer");
+ throw new ProcedureException("ADD_REGION_PEER executed failed in DataNode");
}
setNextState(RegionTransitionState.CHANGE_REGION_LEADER);
break;
@@ -111,7 +111,7 @@ public class RegionMigrateProcedure
if (tsStatus.getCode() == SUCCESS_STATUS.getStatusCode()) {
waitForOneMigrationStepFinished(consensusGroupId, state);
} else {
- throw new ProcedureException("Failed to remove region peer");
+ throw new ProcedureException("REMOVE_REGION_PEER executed failed in DataNode");
}
setNextState(RegionTransitionState.DELETE_OLD_REGION_PEER);
break;
@@ -150,8 +150,7 @@ public class RegionMigrateProcedure
"Procedure retried failed exceed 5 times, state stuck at " + state));
}
- // meets exception in region migrate process
- // terminate the process
+ // meets exception in region migrate process terminate the process
return Flow.NO_MORE_STATE;
}
}
diff --git a/server/src/main/java/org/apache/iotdb/db/service/RegionMigrateService.java b/server/src/main/java/org/apache/iotdb/db/service/RegionMigrateService.java
index 651ed99ac3..8c37145a4b 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/RegionMigrateService.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/RegionMigrateService.java
@@ -184,15 +184,16 @@ public class RegionMigrateService implements IService {
}
}
- private static void reportSucceed(TConsensusGroupId tRegionId) {
+ private static void reportSucceed(TConsensusGroupId tRegionId, String migrateState) {
TSStatus status = new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
- status.setMessage("Region: " + tRegionId + " migrated succeed");
+ status.setMessage(
+ String.format("Region:%s, state: %s, executed succeed", tRegionId, migrateState));
TRegionMigrateResultReportReq req = new TRegionMigrateResultReportReq(tRegionId, status);
try {
reportRegionMigrateResultToConfigNode(req);
} catch (Throwable e) {
LOGGER.error(
- "Report region {} migrate successful result error, result:{}", tRegionId, req, e);
+ "Report region {} migrate successful result error, result: {}", tRegionId, req, e);
}
}
@@ -258,7 +259,7 @@ public class RegionMigrateService implements IService {
return;
}
- reportSucceed(tRegionId);
+ reportSucceed(tRegionId, "AddPeer");
}
private TSStatus addPeer() {
@@ -266,7 +267,7 @@ public class RegionMigrateService implements IService {
TSStatus status = new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
ConsensusGenericResponse resp = null;
TEndPoint newPeerNode = getConsensusEndPoint(selectedDataNode, regionId);
- taskLogger.info("Start to add peer {} for region {}", newPeerNode, tRegionId);
+ taskLogger.info("Start to addPeer {} for region {}", newPeerNode, tRegionId);
boolean addPeerSucceed = true;
for (int i = 0; i < MAX_RETRY_NUM; i++) {
try {
@@ -280,7 +281,7 @@ public class RegionMigrateService implements IService {
} catch (Throwable e) {
addPeerSucceed = false;
taskLogger.error(
- "{}, Add new peer {} for region {} error, retry times: {}",
+ "{}, executed addPeer {} for region {} error, retry times: {}",
REMOVE_DATANODE_PROCESS,
newPeerNode,
regionId,
@@ -312,7 +313,7 @@ public class RegionMigrateService implements IService {
}
taskLogger.info(
- "{}, Succeed to add peer {} for region {}",
+ "{}, Succeed to addPeer {} for region {}",
REMOVE_DATANODE_PROCESS,
newPeerNode,
regionId);
@@ -351,10 +352,8 @@ public class RegionMigrateService implements IService {
private static class RemoveRegionPeerTask implements Runnable {
private static final Logger taskLogger = LoggerFactory.getLogger(RemoveRegionPeerTask.class);
- // The RegionGroup that shall perform the remove peer process
private final TConsensusGroupId tRegionId;
- // The DataNode that selected to perform the remove peer process
private final TDataNodeLocation selectedDataNode;
public RemoveRegionPeerTask(TConsensusGroupId tRegionId, TDataNodeLocation selectedDataNode) {
@@ -365,12 +364,12 @@ public class RegionMigrateService implements IService {
@Override
public void run() {
TSStatus runResult = removePeer();
- if (isFailed(runResult)) {
+ if (isSucceed(runResult)) {
+ reportSucceed(tRegionId, "RemovePeer");
+ } else {
reportFailed(
tRegionId, selectedDataNode, TRegionMigrateFailedType.RemovePeerFailed, runResult);
}
-
- reportSucceed(tRegionId);
}
private ConsensusGenericResponse removeRegionPeer(ConsensusGroupId regionId, Peer oldPeer) {
@@ -387,7 +386,11 @@ public class RegionMigrateService implements IService {
ConsensusGroupId regionId = ConsensusGroupId.Factory.createFromTConsensusGroupId(tRegionId);
TSStatus status = new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
TEndPoint oldPeerNode = getConsensusEndPoint(selectedDataNode, regionId);
- taskLogger.info("Start to remove peer {} for region {}", oldPeerNode, regionId);
+ taskLogger.info(
+ "{}, Start to remove peer {} for region {}",
+ REMOVE_DATANODE_PROCESS,
+ oldPeerNode,
+ regionId);
ConsensusGenericResponse resp = null;
boolean removePeerSucceed = true;
for (int i = 0; i < MAX_RETRY_NUM; i++) {
@@ -419,13 +422,21 @@ public class RegionMigrateService implements IService {
if (!removePeerSucceed || resp == null || !resp.isSuccess()) {
taskLogger.error(
- "Remove old peer {} for region {} failed, resp: {}", oldPeerNode, regionId, resp);
+ "{}, Remove old peer {} for region {} failed, resp: {}",
+ REMOVE_DATANODE_PROCESS,
+ oldPeerNode,
+ regionId,
+ resp);
status.setCode(TSStatusCode.MIGRATE_REGION_ERROR.getStatusCode());
status.setMessage("remove old peer " + oldPeerNode + " for region " + regionId + " failed");
return status;
}
- taskLogger.info("Succeed to remove peer {} for region {}", oldPeerNode, regionId);
+ taskLogger.info(
+ "{}, Succeed to remove peer {} for region {}",
+ REMOVE_DATANODE_PROCESS,
+ oldPeerNode,
+ regionId);
status.setCode(TSStatusCode.SUCCESS_STATUS.getStatusCode());
status.setMessage("Remove peer " + oldPeerNode + " for region " + regionId + " succeed");
return status;
@@ -451,10 +462,8 @@ public class RegionMigrateService implements IService {
private static class DeleteOldRegionPeerTask implements Runnable {
private static final Logger taskLogger = LoggerFactory.getLogger(DeleteOldRegionPeerTask.class);
- // migrate which region
private final TConsensusGroupId tRegionId;
- // migrate from which node
private final TDataNodeLocation fromNode;
public DeleteOldRegionPeerTask(TConsensusGroupId tRegionId, TDataNodeLocation fromNode) {
@@ -475,7 +484,7 @@ public class RegionMigrateService implements IService {
reportFailed(tRegionId, fromNode, TRegionMigrateFailedType.DeleteRegionFailed, runResult);
}
- reportSucceed(tRegionId);
+ reportSucceed(tRegionId, "DeletePeer");
}
private TSStatus deleteOldRegionPeer() {
@@ -497,7 +506,7 @@ public class RegionMigrateService implements IService {
return status;
}
if (!resp.isSuccess()) {
- taskLogger.error("deleteOldRegionPeer error, regionId: {}", regionId, resp.getException());
+ taskLogger.error("DeleteOldRegionPeer error, regionId: {}", regionId, resp.getException());
status.setCode(TSStatusCode.REGION_MIGRATE_FAILED.getStatusCode());
status.setMessage(
String.format(
@@ -505,7 +514,7 @@ public class RegionMigrateService implements IService {
regionId, resp.getException().getMessage()));
return status;
}
- taskLogger.info("succeed to remove region {} consensus group", regionId);
+ taskLogger.info("Succeed to remove region {} consensus group", regionId);
status.setMessage("remove region consensus group " + regionId + "succeed");
return status;
}
@@ -513,7 +522,7 @@ public class RegionMigrateService implements IService {
private TSStatus deleteRegion() {
TSStatus status = new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
ConsensusGroupId regionId = ConsensusGroupId.Factory.createFromTConsensusGroupId(tRegionId);
- taskLogger.debug("start to delete region {}", regionId);
+ taskLogger.info("Start to delete region {}", regionId);
try {
if (regionId instanceof DataRegionId) {
StorageEngineV2.getInstance().deleteDataRegion((DataRegionId) regionId);
@@ -521,9 +530,9 @@ public class RegionMigrateService implements IService {
SchemaEngine.getInstance().deleteSchemaRegion((SchemaRegionId) regionId);
}
} catch (Throwable e) {
- taskLogger.error("delete the region {} failed", regionId, e);
+ taskLogger.error("Delete the region {} failed", regionId, e);
status.setCode(TSStatusCode.DELETE_REGION_ERROR.getStatusCode());
- status.setMessage("delete region " + regionId + "failed, " + e.getMessage());
+ status.setMessage("Delete region " + regionId + "failed, " + e.getMessage());
return status;
}
status.setMessage("delete region " + regionId + " succeed");