This is an automated email from the ASF dual-hosted git repository. tanxinyu pushed a commit to branch consensus_module_refactor in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit b3e5a652116b06deb2d0e9568393d0e1576b991d Author: BUAAserein <[email protected]> AuthorDate: Thu Aug 17 17:52:23 2023 +0800 refactor transferLeader --- .../iotdb/confignode/manager/node/NodeManager.java | 15 +++++------ .../iotdb/consensus/ratis/RatisConsensusTest.java | 5 +--- .../consensus/simple/SimpleConsensusTest.java | 11 +++++--- .../impl/DataNodeInternalRPCServiceImpl.java | 31 ++++++++++------------ 4 files changed, 29 insertions(+), 33 deletions(-) diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/NodeManager.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/NodeManager.java index 646c7381104..43f1156e55e 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/NodeManager.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/NodeManager.java @@ -76,7 +76,6 @@ import org.apache.iotdb.confignode.rpc.thrift.TRuntimeConfiguration; 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; import org.apache.iotdb.consensus.exception.ConsensusException; import org.apache.iotdb.rpc.RpcUtils; import org.apache.iotdb.rpc.TSStatusCode; @@ -623,13 +622,13 @@ public class NodeManager { .setMessage( "Transfer ConfigNode leader failed because can not find any running ConfigNode."); } - ConsensusGenericResponse resp = - getConsensusManager() - .getConsensusImpl() - .transferLeader( - groupId, - new Peer(groupId, newLeader.getConfigNodeId(), newLeader.getConsensusEndPoint())); - if (!resp.isSuccess()) { + try { + getConsensusManager() + .getConsensusImpl() + .transferLeader( + groupId, + new Peer(groupId, newLeader.getConfigNodeId(), newLeader.getConsensusEndPoint())); + } catch (ConsensusException e) { return new TSStatus(TSStatusCode.REMOVE_CONFIGNODE_ERROR.getStatusCode()) .setMessage("Remove ConfigNode failed because transfer ConfigNode leader failed."); } diff --git a/iotdb-core/consensus/src/test/java/org/apache/iotdb/consensus/ratis/RatisConsensusTest.java b/iotdb-core/consensus/src/test/java/org/apache/iotdb/consensus/ratis/RatisConsensusTest.java index 10dcdfcc0c8..8fcc5b88461 100644 --- a/iotdb-core/consensus/src/test/java/org/apache/iotdb/consensus/ratis/RatisConsensusTest.java +++ b/iotdb-core/consensus/src/test/java/org/apache/iotdb/consensus/ratis/RatisConsensusTest.java @@ -26,7 +26,6 @@ import org.apache.iotdb.consensus.IStateMachine; import org.apache.iotdb.consensus.common.ConsensusGroup; import org.apache.iotdb.consensus.common.Peer; import org.apache.iotdb.consensus.common.request.ByteBufferConsensusRequest; -import org.apache.iotdb.consensus.common.response.ConsensusGenericResponse; import org.apache.iotdb.consensus.config.RatisConfig; import org.apache.iotdb.consensus.exception.ConsensusException; import org.apache.iotdb.consensus.exception.RatisRequestFailedException; @@ -189,9 +188,7 @@ public class RatisConsensusTest { int leaderIndex = servers.get(0).getLeader(group.getGroupId()).getNodeId() - 1; - ConsensusGenericResponse resp = - servers.get(0).transferLeader(group.getGroupId(), peers.get((leaderIndex + 1) % 3)); - Assert.assertTrue(resp.isSuccess()); + servers.get(0).transferLeader(group.getGroupId(), peers.get((leaderIndex + 1) % 3)); Peer newLeader = servers.get(0).getLeader(group.getGroupId()); Assert.assertNotNull(newLeader); diff --git a/iotdb-core/consensus/src/test/java/org/apache/iotdb/consensus/simple/SimpleConsensusTest.java b/iotdb-core/consensus/src/test/java/org/apache/iotdb/consensus/simple/SimpleConsensusTest.java index 57dee99eae7..6887f25ec9d 100644 --- a/iotdb-core/consensus/src/test/java/org/apache/iotdb/consensus/simple/SimpleConsensusTest.java +++ b/iotdb-core/consensus/src/test/java/org/apache/iotdb/consensus/simple/SimpleConsensusTest.java @@ -248,10 +248,13 @@ public class SimpleConsensusTest { @Test public void transferLeader() { - ConsensusGenericResponse response = - consensusImpl.transferLeader( - dataRegionId, new Peer(dataRegionId, 1, new TEndPoint("0.0.0.0", 6667))); - assertFalse(response.isSuccess()); + try { + consensusImpl.transferLeader( + dataRegionId, new Peer(dataRegionId, 1, new TEndPoint("0.0.0.0", 6667))); + assert false; + } catch (ConsensusException e) { + assert true; + } } @Test diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java index 3dce5d6f5fa..187a8d7415d 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java @@ -50,7 +50,6 @@ import org.apache.iotdb.commons.trigger.TriggerInformation; import org.apache.iotdb.commons.udf.UDFInformation; import org.apache.iotdb.commons.udf.service.UDFManagementService; import org.apache.iotdb.consensus.common.Peer; -import org.apache.iotdb.consensus.common.response.ConsensusGenericResponse; import org.apache.iotdb.consensus.exception.ConsensusException; import org.apache.iotdb.consensus.exception.PeerNotInConsensusGroupException; import org.apache.iotdb.db.auth.AuthorizerManager; @@ -1461,26 +1460,24 @@ public class DataNodeInternalRPCServiceImpl implements IDataNodeRPCService.Iface private TSStatus transferLeader(ConsensusGroupId regionId, Peer newLeaderPeer) { TSStatus status = new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode()); - ConsensusGenericResponse resp; - if (regionId instanceof DataRegionId) { - resp = DataRegionConsensusImpl.getInstance().transferLeader(regionId, newLeaderPeer); - } else if (regionId instanceof SchemaRegionId) { - resp = SchemaRegionConsensusImpl.getInstance().transferLeader(regionId, newLeaderPeer); - } else { - status.setCode(TSStatusCode.REGION_LEADER_CHANGE_ERROR.getStatusCode()); - status.setMessage("[ChangeRegionLeader] Error Region type: " + regionId); - return status; - } - - if (!resp.isSuccess()) { + try { + if (regionId instanceof DataRegionId) { + DataRegionConsensusImpl.getInstance().transferLeader(regionId, newLeaderPeer); + } else if (regionId instanceof SchemaRegionId) { + SchemaRegionConsensusImpl.getInstance().transferLeader(regionId, newLeaderPeer); + } else { + status.setCode(TSStatusCode.REGION_LEADER_CHANGE_ERROR.getStatusCode()); + status.setMessage("[ChangeRegionLeader] Error Region type: " + regionId); + return status; + } + } catch (ConsensusException e) { LOGGER.warn( - "[ChangeRegionLeader] Failed to change the leader of RegionGroup: {}", - regionId, - resp.getException()); + "[ChangeRegionLeader] Failed to change the leader of RegionGroup: {}", regionId, e); status.setCode(TSStatusCode.REGION_LEADER_CHANGE_ERROR.getStatusCode()); - status.setMessage(resp.getException().getMessage()); + status.setMessage(e.getMessage()); return status; } + status.setMessage( "[ChangeRegionLeader] Successfully change the leader of RegionGroup: " + regionId
