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/ratis.git
The following commit(s) were added to refs/heads/master by this push:
new 72c920c6e RATIS-2237 Add getFollowerMatchIndices interface for
DivisionInfo
72c920c6e is described below
commit 72c920c6e8e4bd24b254ad9e56514e1fa9a66283
Author: Potato <[email protected]>
AuthorDate: Mon Jan 13 09:52:28 2025 +0800
RATIS-2237 Add getFollowerMatchIndices interface for DivisionInfo
Signed-off-by: OneSizeFitQuorum <[email protected]>
---
.../src/main/java/org/apache/ratis/server/DivisionInfo.java | 6 ++++++
.../main/java/org/apache/ratis/server/impl/LeaderStateImpl.java | 4 ++++
.../main/java/org/apache/ratis/server/impl/RaftServerImpl.java | 8 ++++++++
3 files changed, 18 insertions(+)
diff --git
a/ratis-server-api/src/main/java/org/apache/ratis/server/DivisionInfo.java
b/ratis-server-api/src/main/java/org/apache/ratis/server/DivisionInfo.java
index c07317bd6..78073a21c 100644
--- a/ratis-server-api/src/main/java/org/apache/ratis/server/DivisionInfo.java
+++ b/ratis-server-api/src/main/java/org/apache/ratis/server/DivisionInfo.java
@@ -80,4 +80,10 @@ public interface DivisionInfo {
* otherwise, return null.
*/
long[] getFollowerNextIndices();
+
+ /**
+ * @return an array of match indices of the followers if this server
division is the leader;
+ * otherwise, return null.
+ */
+ long[] getFollowerMatchIndices();
}
diff --git
a/ratis-server/src/main/java/org/apache/ratis/server/impl/LeaderStateImpl.java
b/ratis-server/src/main/java/org/apache/ratis/server/impl/LeaderStateImpl.java
index f5682e35f..bb705fb9f 100644
---
a/ratis-server/src/main/java/org/apache/ratis/server/impl/LeaderStateImpl.java
+++
b/ratis-server/src/main/java/org/apache/ratis/server/impl/LeaderStateImpl.java
@@ -1214,6 +1214,10 @@ class LeaderStateImpl implements LeaderState {
return getLogAppenders().mapToLong(s ->
s.getFollower().getNextIndex()).toArray();
}
+ long[] getFollowerMatchIndices() {
+ return getLogAppenders().mapToLong(s ->
s.getFollower().getMatchIndex()).toArray();
+ }
+
static Map<RaftPeerId, RaftPeer> newMap(Collection<RaftPeer> peers, String
str) {
Objects.requireNonNull(peers, () -> str + " == null");
final Map<RaftPeerId, RaftPeer> map = new HashMap<>();
diff --git
a/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java
b/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java
index 4c752d43b..c67329cae 100644
---
a/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java
+++
b/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java
@@ -206,6 +206,14 @@ class RaftServerImpl implements RaftServer.Division,
.map(LeaderStateImpl::getFollowerNextIndices)
.orElse(null);
}
+
+ @Override
+ public long[] getFollowerMatchIndices() {
+ return role.getLeaderState()
+ .filter(leader -> isLeader())
+ .map(LeaderStateImpl::getFollowerMatchIndices)
+ .orElse(null);
+ }
}
private final RaftServerProxy proxy;