This is an automated email from the ASF dual-hosted git repository.
xingtanzjr 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 9c244b7f4f [IOTDB-3747] Fix log bug (#6612)
9c244b7f4f is described below
commit 9c244b7f4f103d391385381fc8bec9499d796918
Author: YongzaoDan <[email protected]>
AuthorDate: Thu Jul 7 19:57:01 2022 +0800
[IOTDB-3747] Fix log bug (#6612)
---
.../response/DataNodeConfigurationResp.java | 6 +++-
.../iotdb/confignode/manager/NodeManager.java | 38 ++++++++++++----------
.../iotdb/confignode/persistence/NodeInfo.java | 11 +++++--
.../thrift/ConfigNodeRPCServiceProcessor.java | 10 +++---
4 files changed, 38 insertions(+), 27 deletions(-)
diff --git
a/confignode/src/main/java/org/apache/iotdb/confignode/consensus/response/DataNodeConfigurationResp.java
b/confignode/src/main/java/org/apache/iotdb/confignode/consensus/response/DataNodeConfigurationResp.java
index c4672cf4b0..6af40f276f 100644
---
a/confignode/src/main/java/org/apache/iotdb/confignode/consensus/response/DataNodeConfigurationResp.java
+++
b/confignode/src/main/java/org/apache/iotdb/confignode/consensus/response/DataNodeConfigurationResp.java
@@ -59,13 +59,17 @@ public class DataNodeConfigurationResp implements DataSet {
this.globalConfig = globalConfig;
}
- public void convertToRpcDataNodeRegisterResp(TDataNodeRegisterResp resp) {
+ public TDataNodeRegisterResp convertToRpcDataNodeRegisterResp() {
+ TDataNodeRegisterResp resp = new TDataNodeRegisterResp();
resp.setStatus(status);
resp.setConfigNodeList(configNodeList);
+
if (status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()
|| status.getCode() ==
TSStatusCode.DATANODE_ALREADY_REGISTERED.getStatusCode()) {
resp.setDataNodeId(dataNodeId);
resp.setGlobalConfig(globalConfig);
}
+
+ return resp;
}
}
diff --git
a/confignode/src/main/java/org/apache/iotdb/confignode/manager/NodeManager.java
b/confignode/src/main/java/org/apache/iotdb/confignode/manager/NodeManager.java
index bac86cbe09..e78babad7c 100644
---
a/confignode/src/main/java/org/apache/iotdb/confignode/manager/NodeManager.java
+++
b/confignode/src/main/java/org/apache/iotdb/confignode/manager/NodeManager.java
@@ -43,7 +43,6 @@ import org.apache.iotdb.confignode.rpc.thrift.TGlobalConfig;
import org.apache.iotdb.consensus.common.DataSet;
import org.apache.iotdb.consensus.common.Peer;
import org.apache.iotdb.consensus.common.response.ConsensusGenericResponse;
-import org.apache.iotdb.consensus.common.response.ConsensusWriteResponse;
import org.apache.iotdb.rpc.TSStatusCode;
import org.slf4j.Logger;
@@ -94,25 +93,29 @@ public class NodeManager {
/**
* Register DataNode
*
- * @param req RegisterDataNodeReq
+ * @param registerDataNodePlan RegisterDataNodeReq
* @return DataNodeConfigurationDataSet. The TSStatus will be set to
SUCCESS_STATUS when register
* success, and DATANODE_ALREADY_REGISTERED when the DataNode is already
exist.
*/
- public DataSet registerDataNode(RegisterDataNodePlan req) {
+ public DataSet registerDataNode(RegisterDataNodePlan registerDataNodePlan) {
DataNodeConfigurationResp dataSet = new DataNodeConfigurationResp();
- TSStatus status = new
TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
- status.setMessage("registerDataNode success.");
- if (nodeInfo.isRegisteredDataNode(req.getInfo().getLocation())) {
+ TSStatus status = new TSStatus();
+
+ if
(nodeInfo.isRegisteredDataNode(registerDataNodePlan.getInfo().getLocation())) {
status.setCode(TSStatusCode.DATANODE_ALREADY_REGISTERED.getStatusCode());
status.setMessage("DataNode already registered.");
- } else if (req.getInfo().getLocation().getDataNodeId() < 0) {
- // only when new dataNode is registered, generate new dataNodeId
- req.getInfo().getLocation().setDataNodeId(nodeInfo.generateNextNodeId());
- status = getConsensusManager().write(req).getStatus();
+ } else if (registerDataNodePlan.getInfo().getLocation().getDataNodeId() <
0) {
+ // Generating a new dataNodeId only when current DataNode doesn't exist
yet
+
registerDataNodePlan.getInfo().getLocation().setDataNodeId(nodeInfo.generateNextNodeId());
+ getConsensusManager().write(registerDataNodePlan);
+
+ status.setCode(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+ status.setMessage("registerDataNode success.");
}
+
dataSet.setStatus(status);
- dataSet.setDataNodeId(req.getInfo().getLocation().getDataNodeId());
- dataSet.setConfigNodeList(nodeInfo.getRegisteredConfigNodes());
+
dataSet.setDataNodeId(registerDataNodePlan.getInfo().getLocation().getDataNodeId());
+ dataSet.setConfigNodeList(getRegisteredConfigNodes());
setGlobalConfig(dataSet);
return dataSet;
}
@@ -120,20 +123,21 @@ public class NodeManager {
/**
* Active DataNode
*
- * @param req ActiveDataNodeReq
+ * @param activateDataNodePlan ActiveDataNodeReq
* @return TSStatus The TSStatus will be set to SUCCESS_STATUS when active
success, and
* DATANODE_ALREADY_REGISTERED when the DataNode is already exist.
*/
- public TSStatus activateDataNode(ActivateDataNodePlan req) {
+ public TSStatus activateDataNode(ActivateDataNodePlan activateDataNodePlan) {
TSStatus status = new TSStatus();
- if (nodeInfo.isRegisteredDataNode(req.getInfo().getLocation())) {
+ if
(nodeInfo.isRegisteredDataNode(activateDataNodePlan.getInfo().getLocation())) {
status.setCode(TSStatusCode.DATANODE_ALREADY_ACTIVATED.getStatusCode());
status.setMessage("DataNode already activated.");
} else {
- ConsensusWriteResponse resp = getConsensusManager().write(req);
- status = resp.getStatus();
+ getConsensusManager().write(activateDataNodePlan);
// Adjust the maximum RegionGroup number of each StorageGroup
getClusterSchemaManager().adjustMaxRegionGroupCount();
+ status.setCode(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+ status.setMessage("activateDataNode success.");
}
return status;
}
diff --git
a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/NodeInfo.java
b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/NodeInfo.java
index e6040b86ca..0353ff815a 100644
---
a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/NodeInfo.java
+++
b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/NodeInfo.java
@@ -125,11 +125,16 @@ public class NodeInfo implements SnapshotProcessor {
}
}
- /** @return true if the specific DataNode is registered */
+ /**
+ * Only leader use this interface
+ *
+ * @return True if the specific DataNode already registered, false otherwise
+ */
public boolean isRegisteredDataNode(TDataNodeLocation dataNodeLocation) {
boolean result = false;
- dataNodeInfoReadWriteLock.readLock().lock();
+
int originalDataNodeId = dataNodeLocation.getDataNodeId();
+ dataNodeInfoReadWriteLock.readLock().lock();
try {
for (Map.Entry<Integer, TDataNodeInfo> entry :
registeredDataNodes.entrySet()) {
dataNodeLocation.setDataNodeId(entry.getKey());
@@ -137,11 +142,11 @@ public class NodeInfo implements SnapshotProcessor {
result = true;
break;
}
- dataNodeLocation.setDataNodeId(originalDataNodeId);
}
} finally {
dataNodeInfoReadWriteLock.readLock().unlock();
}
+ dataNodeLocation.setDataNodeId(originalDataNodeId);
return result;
}
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 870eb24568..c797ede063 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
@@ -131,12 +131,10 @@ public class ConfigNodeRPCServiceProcessor implements
IConfigNodeRPCService.Ifac
@Override
public TDataNodeRegisterResp registerDataNode(TDataNodeRegisterReq req)
throws TException {
- RegisterDataNodePlan registerReq = new
RegisterDataNodePlan(req.getDataNodeInfo());
- DataNodeConfigurationResp registerResp =
- (DataNodeConfigurationResp)
configManager.registerDataNode(registerReq);
-
- TDataNodeRegisterResp resp = new TDataNodeRegisterResp();
- registerResp.convertToRpcDataNodeRegisterResp(resp);
+ TDataNodeRegisterResp resp =
+ ((DataNodeConfigurationResp)
+ configManager.registerDataNode(new
RegisterDataNodePlan(req.getDataNodeInfo())))
+ .convertToRpcDataNodeRegisterResp();
// Print log to record the ConfigNode that performs the
RegisterDatanodeRequest
LOGGER.info("Execute RegisterDatanodeRequest {} with result {}", req,
resp);