liyuheng55555 commented on code in PR #12165:
URL: https://github.com/apache/iotdb/pull/12165#discussion_r1533429359
##########
iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java:
##########
@@ -535,125 +537,136 @@ public boolean removeDataNode(RemoveDataNodePlan
removeDataNodePlan) {
return true;
}
- public TSStatus migrateRegion(TMigrateRegionReq migrateRegionReq) {
- TConsensusGroupId regionGroupId;
+ // region region migration
+
+ private TConsensusGroupId idToTConsensusGroupId(final int regionId) throws
ProcedureException {
if (configManager
.getPartitionManager()
- .isRegionGroupExists(
- new TConsensusGroupId(
- TConsensusGroupType.SchemaRegion,
migrateRegionReq.getRegionId()))) {
- regionGroupId =
- new TConsensusGroupId(TConsensusGroupType.SchemaRegion,
migrateRegionReq.getRegionId());
- } else if (configManager
+ .isRegionGroupExists(new
TConsensusGroupId(TConsensusGroupType.SchemaRegion, regionId))) {
+ return new TConsensusGroupId(TConsensusGroupType.SchemaRegion, regionId);
+ }
+ if (configManager
.getPartitionManager()
- .isRegionGroupExists(
- new TConsensusGroupId(
- TConsensusGroupType.DataRegion,
migrateRegionReq.getRegionId()))) {
- regionGroupId =
- new TConsensusGroupId(TConsensusGroupType.DataRegion,
migrateRegionReq.getRegionId());
- } else {
- LOGGER.warn(
- "Submit RegionMigrateProcedure failed, because RegionGroup: {}
doesn't exist",
- migrateRegionReq.getRegionId());
- TSStatus status = new
TSStatus(TSStatusCode.MIGRATE_REGION_ERROR.getStatusCode());
- status.setMessage(
- String.format(
- "Submit RegionMigrateProcedure failed, because RegionGroup: %s
doesn't exist",
- migrateRegionReq.getRegionId()));
- return status;
+ .isRegionGroupExists(new
TConsensusGroupId(TConsensusGroupType.DataRegion, regionId))) {
+ return new TConsensusGroupId(TConsensusGroupType.DataRegion, regionId);
}
+ String msg =
+ String.format(
+ "Submit RegionMigrateProcedure failed, because RegionGroup: %s
doesn't exist",
+ regionId);
+ LOGGER.warn(msg);
+ throw new ProcedureException(msg);
+ }
- TDataNodeLocation originalDataNode =
- configManager
- .getNodeManager()
- .getRegisteredDataNode(migrateRegionReq.getFromId())
- .getLocation();
- TDataNodeLocation destDataNode =
- configManager
- .getNodeManager()
- .getRegisteredDataNode(migrateRegionReq.getToId())
- .getLocation();
-
+ private TSStatus checkRegionMigrate(
+ TMigrateRegionReq migrateRegionReq,
+ TConsensusGroupId regionGroupId,
+ TDataNodeLocation originalDataNode,
+ TDataNodeLocation destDataNode,
+ TDataNodeLocation coordinatorForAddPeer) {
+ String failMessage = null;
if (originalDataNode == null) {
- LOGGER.warn(
- "Submit RegionMigrateProcedure failed, because no original DataNode
{}",
- migrateRegionReq.getFromId());
- TSStatus status = new
TSStatus(TSStatusCode.MIGRATE_REGION_ERROR.getStatusCode());
- status.setMessage(
- "Submit RegionMigrateProcedure failed, because no original DataNode "
- + migrateRegionReq.getFromId());
- return status;
+ failMessage =
+ String.format(
+ "Submit RegionMigrateProcedure failed, because no original
DataNode %d",
+ migrateRegionReq.getFromId());
} else if (destDataNode == null) {
- LOGGER.warn(
- "Submit RegionMigrateProcedure failed, because no target DataNode
{}",
- migrateRegionReq.getToId());
- TSStatus status = new
TSStatus(TSStatusCode.MIGRATE_REGION_ERROR.getStatusCode());
- status.setMessage(
- "Submit RegionMigrateProcedure failed, because no target DataNode "
- + migrateRegionReq.getToId());
- return status;
+ failMessage =
+ String.format(
+ "Submit RegionMigrateProcedure failed, because no target
DataNode %s",
+ migrateRegionReq.getToId());
+ } else if (coordinatorForAddPeer == null) {
+ failMessage =
+ String.format(
+ "%s, There are no other DataNodes could be selected to perform
the add peer process, "
+ + "please check RegionGroup: %s by show regions sql command",
+ REGION_MIGRATE_PROCESS, regionGroupId);
} else if (configManager.getPartitionManager()
.getAllReplicaSets(originalDataNode.getDataNodeId()).stream()
.noneMatch(replicaSet ->
replicaSet.getRegionId().equals(regionGroupId))) {
- LOGGER.warn(
- "Submit RegionMigrateProcedure failed, because the original DataNode
{} doesn't contain Region {}",
- migrateRegionReq.getFromId(),
- migrateRegionReq.getRegionId());
- TSStatus status = new
TSStatus(TSStatusCode.MIGRATE_REGION_ERROR.getStatusCode());
- status.setMessage(
- "Submit RegionMigrateProcedure failed, because the original DataNode
"
- + migrateRegionReq.getFromId()
- + " doesn't contain Region "
- + migrateRegionReq.getRegionId());
- return status;
+ failMessage =
+ String.format(
+ "Submit RegionMigrateProcedure failed, because the original
DataNode %s doesn't contain Region %s",
+ migrateRegionReq.getFromId(), migrateRegionReq.getRegionId());
} else if
(configManager.getPartitionManager().getAllReplicaSets(destDataNode.getDataNodeId())
.stream()
.anyMatch(replicaSet ->
replicaSet.getRegionId().equals(regionGroupId))) {
- LOGGER.warn(
- "Submit RegionMigrateProcedure failed, because the target DataNode
{} already contains Region {}",
- migrateRegionReq.getToId(),
- migrateRegionReq.getRegionId());
- TSStatus status = new
TSStatus(TSStatusCode.MIGRATE_REGION_ERROR.getStatusCode());
- status.setMessage(
- "Submit RegionMigrateProcedure failed, because the target DataNode "
- + migrateRegionReq.getToId()
- + " already contains Region "
- + migrateRegionReq.getRegionId());
- return status;
- }
- // Here we only check Running DataNode to implement migration, because
removing nodes may not
- // exist when add peer is performing
- Set<Integer> aliveDataNodes =
-
configManager.getNodeManager().filterDataNodeThroughStatus(NodeStatus.Running).stream()
- .map(TDataNodeConfiguration::getLocation)
- .map(TDataNodeLocation::getDataNodeId)
- .collect(Collectors.toSet());
- if (NodeStatus.Unknown.equals(
+ failMessage =
+ String.format(
+ "Submit RegionMigrateProcedure failed, because the target
DataNode %s already contains Region %s",
+ migrateRegionReq.getToId(), migrateRegionReq.getRegionId());
+ } else if (NodeStatus.Unknown.equals(
configManager.getLoadManager().getNodeStatus(migrateRegionReq.getFromId()))) {
- LOGGER.warn(
- "Submit RegionMigrateProcedure failed, because the sourceDataNode {}
is Unknown.",
- migrateRegionReq.getFromId());
- TSStatus status = new
TSStatus(TSStatusCode.MIGRATE_REGION_ERROR.getStatusCode());
- status.setMessage(
- "Submit RegionMigrateProcedure failed, because the sourceDataNode "
- + migrateRegionReq.getFromId()
- + " is Unknown.");
- return status;
+ failMessage =
+ String.format(
+ "Submit RegionMigrateProcedure failed, because the
sourceDataNode %s is Unknown.",
+ migrateRegionReq.getFromId());
Review Comment:
deleted
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]