This is an automated email from the ASF dual-hosted git repository.
tanxinyu 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 eee72fbf3aa [IOTDB-6301] wait leader ready in single replica (#12234)
eee72fbf3aa is described below
commit eee72fbf3aaca9f02b6b87a6e1e2acd46afef6f9
Author: Xiangpeng Hu <[email protected]>
AuthorDate: Tue Apr 9 16:17:32 2024 +0800
[IOTDB-6301] wait leader ready in single replica (#12234)
---
.../main/java/org/apache/iotdb/consensus/ratis/RatisConsensus.java | 5 +++--
.../java/org/apache/iotdb/consensus/ratis/RatisConsensusTest.java | 7 ++++---
2 files changed, 7 insertions(+), 5 deletions(-)
diff --git
a/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/ratis/RatisConsensus.java
b/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/ratis/RatisConsensus.java
index 5fa4eb19b06..3a6082ae2fe 100644
---
a/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/ratis/RatisConsensus.java
+++
b/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/ratis/RatisConsensus.java
@@ -286,7 +286,8 @@ class RatisConsensus implements IConsensus {
buildRawRequest(raftGroupId, message,
RaftClientRequest.writeRequestType());
RaftPeer suggestedLeader = null;
- if (isLeader(groupId) && waitUntilLeaderReady(raftGroupId)) {
+ if ((isLeader(groupId) || raftGroup.getPeers().size() == 1)
+ && waitUntilLeaderReady(raftGroupId)) {
try (AutoCloseable ignored =
RatisMetricsManager.getInstance().startWriteLocallyTimer(consensusGroupType)) {
RaftClientReply localServerReply =
writeLocallyWithRetry(clientRequest);
@@ -630,7 +631,7 @@ class RatisConsensus implements IConsensus {
() ->
Utils.anyOf(
// this peer is not a leader
- () -> !divisionInfo.isLeader(),
+ () -> getGroupInfo(groupId).getPeers().size() > 1 &&
!divisionInfo.isLeader(),
// this peer is a ready leader
() -> divisionInfo.isLeader() && divisionInfo.isLeaderReady(),
// reaches max retry timeout
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 dfcf8214feb..7dcf98caceb 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
@@ -39,6 +39,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
+import java.util.Collections;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -123,10 +124,10 @@ public class RatisConsensusTest {
() -> servers.get(0).createLocalPeer(group.getGroupId(), original));
// add 2 members
- servers.get(1).createLocalPeer(group.getGroupId(), peers.subList(1, 2));
+ servers.get(1).createLocalPeer(group.getGroupId(),
Collections.emptyList());
servers.get(0).addRemotePeer(group.getGroupId(), peers.get(1));
- servers.get(2).createLocalPeer(group.getGroupId(), peers.subList(2, 3));
+ servers.get(2).createLocalPeer(group.getGroupId(),
Collections.emptyList());
servers.get(0).addRemotePeer(group.getGroupId(), peers.get(2));
miniCluster.waitUntilActiveLeaderElectedAndReady();
@@ -173,7 +174,7 @@ public class RatisConsensusTest {
servers.get(0).createLocalPeer(group.getGroupId(), peers.subList(0, 1));
doConsensus(0, 10, 10);
- servers.get(1).createLocalPeer(group.getGroupId(), peers.subList(1, 2));
+ servers.get(1).createLocalPeer(group.getGroupId(),
Collections.emptyList());
servers.get(0).addRemotePeer(group.getGroupId(), peers.get(1));
Assert.assertThrows(
PeerAlreadyInConsensusGroupException.class,