HxpSerein commented on code in PR #13559:
URL: https://github.com/apache/iotdb/pull/13559#discussion_r1776300910
##########
iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/NodeManager.java:
##########
@@ -371,51 +370,58 @@ public TDataNodeRestartResp
updateDataNodeIfNecessary(TDataNodeRestartReq req) {
}
/**
- * Remove DataNodes.
+ * Removes the specified DataNodes.
*
- * @param removeDataNodePlan removeDataNodePlan
- * @return DataNodeToStatusResp, The TSStatus will be SUCCEED_STATUS if the
request is accepted,
- * DATANODE_NOT_EXIST when some datanode does not exist.
+ * @param removeDataNodePlan the plan detailing which DataNodes to remove
+ * @return DataNodeToStatusResp, where the TSStatus will be SUCCEED_STATUS
if the request is
+ * accepted, or DATANODE_NOT_EXIST if any DataNode does not exist.
*/
- public DataSet removeDataNode(RemoveDataNodePlan removeDataNodePlan) {
+ public synchronized DataSet removeDataNode(RemoveDataNodePlan
removeDataNodePlan) {
+
configManager.getProcedureManager().getEnv().getSubmitRegionMigrateLock().lock();
LOGGER.info("NodeManager start to remove DataNode {}", removeDataNodePlan);
+ try {
+ // Checks if the RemoveDataNode request is valid
+ RemoveDataNodeManager manager =
+
configManager.getProcedureManager().getEnv().getRemoveDataNodeManager();
+ DataNodeToStatusResp preCheckStatus =
manager.checkRemoveDataNodeRequest(removeDataNodePlan);
+ if (preCheckStatus.getStatus().getCode() !=
TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
+ LOGGER.error(
+ "The remove DataNode request check failed. req: {}, check result:
{}",
+ removeDataNodePlan,
+ preCheckStatus.getStatus());
+ return preCheckStatus;
+ }
- RegionMaintainHandler handler = new RegionMaintainHandler((ConfigManager)
configManager);
- DataNodeToStatusResp preCheckStatus =
handler.checkRemoveDataNodeRequest(removeDataNodePlan);
- if (preCheckStatus.getStatus().getCode() !=
TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- LOGGER.error(
- "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();
+ if
(configManager.transfer(removeDataNodePlan.getDataNodeLocations()).getCode()
+ != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
+ dataSet.setStatus(
+ new TSStatus(TSStatusCode.REMOVE_DATANODE_ERROR.getStatusCode())
+ .setMessage("Fail to do transfer of the DataNodes"));
Review Comment:
resolved
--
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]