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;
