This is an automated email from the ASF dual-hosted git repository.

szetszwo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ratis.git

commit 461c7a6328cef25accce8ebd41e84603f82fcf63
Author: Potato <[email protected]>
AuthorDate: Mon Jan 13 09:52:28 2025 +0800

    RATIS-2237. Add getFollowerMatchIndices interface for DivisionInfo
---
 .../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 5870f51a6..66d2c1a1c 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
@@ -1212,6 +1212,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 02e038ef8..f7a0623c2 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
@@ -204,6 +204,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;

Reply via email to