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/02 15:44:45 UTC
[iotdb] branch master updated: [IOTDB-4828] Implement TestOnly RPC interface setDataNodeStatus (#7877)
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 9d0a312585 [IOTDB-4828] Implement TestOnly RPC interface setDataNodeStatus (#7877)
9d0a312585 is described below
commit 9d0a312585dcb3cb546eadab117593fe1bd8abc3
Author: YongzaoDan <33...@users.noreply.github.com>
AuthorDate: Wed Nov 2 23:44:37 2022 +0800
[IOTDB-4828] Implement TestOnly RPC interface setDataNodeStatus (#7877)
---
.../org/apache/iotdb/confignode/manager/ConfigManager.java | 9 +++++++++
.../java/org/apache/iotdb/confignode/manager/IManager.java | 4 ++++
.../org/apache/iotdb/confignode/manager/node/NodeManager.java | 10 ++++++++++
.../service/thrift/ConfigNodeRPCServiceProcessor.java | 7 +++++++
.../main/java/org/apache/iotdb/db/client/ConfigNodeClient.java | 6 ++++++
thrift-confignode/src/main/thrift/confignode.thrift | 8 ++++++++
6 files changed, 44 insertions(+)
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java b/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
index dbcf4c3edb..e2d793958d 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
@@ -121,6 +121,7 @@ import org.apache.iotdb.confignode.rpc.thrift.TRegionMigrateResultReportReq;
import org.apache.iotdb.confignode.rpc.thrift.TRegionRouteMapResp;
import org.apache.iotdb.confignode.rpc.thrift.TSchemaNodeManagementResp;
import org.apache.iotdb.confignode.rpc.thrift.TSchemaPartitionTableResp;
+import org.apache.iotdb.confignode.rpc.thrift.TSetDataNodeStatusReq;
import org.apache.iotdb.confignode.rpc.thrift.TSetSchemaTemplateReq;
import org.apache.iotdb.confignode.rpc.thrift.TShowCQResp;
import org.apache.iotdb.confignode.rpc.thrift.TShowClusterResp;
@@ -930,6 +931,14 @@ public class ConfigManager implements IManager {
: status;
}
+ @Override
+ public TSStatus setDataNodeStatus(TSetDataNodeStatusReq req) {
+ TSStatus status = confirmLeader();
+ return status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()
+ ? nodeManager.setDataNodeStatus(req)
+ : status;
+ }
+
@Override
public TRegionRouteMapResp getLatestRegionRouteMap() {
TSStatus status = confirmLeader();
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/manager/IManager.java b/confignode/src/main/java/org/apache/iotdb/confignode/manager/IManager.java
index 659cb6e0bd..ac77ab2954 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/manager/IManager.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/manager/IManager.java
@@ -80,6 +80,7 @@ import org.apache.iotdb.confignode.rpc.thrift.TRegionMigrateResultReportReq;
import org.apache.iotdb.confignode.rpc.thrift.TRegionRouteMapResp;
import org.apache.iotdb.confignode.rpc.thrift.TSchemaNodeManagementResp;
import org.apache.iotdb.confignode.rpc.thrift.TSchemaPartitionTableResp;
+import org.apache.iotdb.confignode.rpc.thrift.TSetDataNodeStatusReq;
import org.apache.iotdb.confignode.rpc.thrift.TSetSchemaTemplateReq;
import org.apache.iotdb.confignode.rpc.thrift.TShowCQResp;
import org.apache.iotdb.confignode.rpc.thrift.TShowClusterResp;
@@ -364,6 +365,9 @@ public interface IManager {
/** Set system status on all DataNodes */
TSStatus setSystemStatus(String status);
+ /** TestOnly. Set the target DataNode to the specified status */
+ TSStatus setDataNodeStatus(TSetDataNodeStatusReq req);
+
/**
* Get the latest RegionRouteMap
*
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 53b1d61794..1eb840c88a 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
@@ -40,6 +40,7 @@ import org.apache.iotdb.confignode.client.async.AsyncDataNodeHeartbeatClientPool
import org.apache.iotdb.confignode.client.async.handlers.AsyncClientHandler;
import org.apache.iotdb.confignode.client.async.handlers.heartbeat.ConfigNodeHeartbeatHandler;
import org.apache.iotdb.confignode.client.async.handlers.heartbeat.DataNodeHeartbeatHandler;
+import org.apache.iotdb.confignode.client.sync.SyncDataNodeClientPool;
import org.apache.iotdb.confignode.conf.ConfigNodeConfig;
import org.apache.iotdb.confignode.conf.ConfigNodeDescriptor;
import org.apache.iotdb.confignode.consensus.request.read.datanode.GetDataNodeConfigurationPlan;
@@ -70,6 +71,7 @@ import org.apache.iotdb.confignode.rpc.thrift.TConfigNodeRegisterResp;
import org.apache.iotdb.confignode.rpc.thrift.TDataNodeInfo;
import org.apache.iotdb.confignode.rpc.thrift.TGlobalConfig;
import org.apache.iotdb.confignode.rpc.thrift.TRatisConfig;
+import org.apache.iotdb.confignode.rpc.thrift.TSetDataNodeStatusReq;
import org.apache.iotdb.consensus.common.DataSet;
import org.apache.iotdb.consensus.common.Peer;
import org.apache.iotdb.consensus.common.response.ConsensusGenericResponse;
@@ -635,6 +637,14 @@ public class NodeManager {
return clientHandler.getResponseList();
}
+ public TSStatus setDataNodeStatus(TSetDataNodeStatusReq setDataNodeStatusReq) {
+ return SyncDataNodeClientPool.getInstance()
+ .sendSyncRequestToDataNodeWithRetry(
+ setDataNodeStatusReq.getTargetDataNode().getInternalEndPoint(),
+ setDataNodeStatusReq.getStatus(),
+ DataNodeRequestType.SET_SYSTEM_STATUS);
+ }
+
/** Start the heartbeat service */
public void startHeartbeatService() {
synchronized (scheduleMonitor) {
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceProcessor.java b/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceProcessor.java
index 7fc03abc08..383d413e31 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceProcessor.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceProcessor.java
@@ -120,6 +120,7 @@ import org.apache.iotdb.confignode.rpc.thrift.TSchemaNodeManagementReq;
import org.apache.iotdb.confignode.rpc.thrift.TSchemaNodeManagementResp;
import org.apache.iotdb.confignode.rpc.thrift.TSchemaPartitionReq;
import org.apache.iotdb.confignode.rpc.thrift.TSchemaPartitionTableResp;
+import org.apache.iotdb.confignode.rpc.thrift.TSetDataNodeStatusReq;
import org.apache.iotdb.confignode.rpc.thrift.TSetDataReplicationFactorReq;
import org.apache.iotdb.confignode.rpc.thrift.TSetSchemaReplicationFactorReq;
import org.apache.iotdb.confignode.rpc.thrift.TSetSchemaTemplateReq;
@@ -589,6 +590,12 @@ public class ConfigNodeRPCServiceProcessor implements IConfigNodeRPCService.Ifac
return configManager.setSystemStatus(status);
}
+ @TestOnly
+ @Override
+ public TSStatus setDataNodeStatus(TSetDataNodeStatusReq req) {
+ return configManager.setDataNodeStatus(req);
+ }
+
@Override
public TShowRegionResp showRegion(TShowRegionReq showRegionReq) {
GetRegionInfoListPlan getRegionInfoListPlan = new GetRegionInfoListPlan(showRegionReq);
diff --git a/server/src/main/java/org/apache/iotdb/db/client/ConfigNodeClient.java b/server/src/main/java/org/apache/iotdb/db/client/ConfigNodeClient.java
index 0872ca7586..45db274090 100644
--- a/server/src/main/java/org/apache/iotdb/db/client/ConfigNodeClient.java
+++ b/server/src/main/java/org/apache/iotdb/db/client/ConfigNodeClient.java
@@ -87,6 +87,7 @@ import org.apache.iotdb.confignode.rpc.thrift.TSchemaNodeManagementReq;
import org.apache.iotdb.confignode.rpc.thrift.TSchemaNodeManagementResp;
import org.apache.iotdb.confignode.rpc.thrift.TSchemaPartitionReq;
import org.apache.iotdb.confignode.rpc.thrift.TSchemaPartitionTableResp;
+import org.apache.iotdb.confignode.rpc.thrift.TSetDataNodeStatusReq;
import org.apache.iotdb.confignode.rpc.thrift.TSetDataReplicationFactorReq;
import org.apache.iotdb.confignode.rpc.thrift.TSetSchemaReplicationFactorReq;
import org.apache.iotdb.confignode.rpc.thrift.TSetSchemaTemplateReq;
@@ -933,6 +934,11 @@ public class ConfigNodeClient
throw new TException(MSG_RECONNECTION_FAIL);
}
+ @Override
+ public TSStatus setDataNodeStatus(TSetDataNodeStatusReq req) throws TException {
+ throw new TException("DataNode to ConfigNode client doesn't support setDataNodeStatus.");
+ }
+
@Override
public TShowRegionResp showRegion(TShowRegionReq req) throws TException {
for (int i = 0; i < RETRY_NUM; i++) {
diff --git a/thrift-confignode/src/main/thrift/confignode.thrift b/thrift-confignode/src/main/thrift/confignode.thrift
index ff00e4dc32..fe7ca6215a 100644
--- a/thrift-confignode/src/main/thrift/confignode.thrift
+++ b/thrift-confignode/src/main/thrift/confignode.thrift
@@ -119,6 +119,11 @@ struct TDataNodeConfigurationResp {
2: optional map<i32, common.TDataNodeConfiguration> dataNodeConfigurationMap
}
+struct TSetDataNodeStatusReq {
+ 1: required common.TDataNodeLocation targetDataNode
+ 2: required string status
+}
+
// StorageGroup
struct TSetStorageGroupReq {
1: required TStorageGroupSchema storageGroup
@@ -914,6 +919,9 @@ service IConfigNodeRPCService {
/** Set system status on DataNodes */
common.TSStatus setSystemStatus(string status)
+ /** TestOnly. Set the target DataNode to the specified status */
+ common.TSStatus setDataNodeStatus(TSetDataNodeStatusReq req)
+
// ======================================================
// Cluster Tools
// ======================================================