Repository: incubator-ratis Updated Branches: refs/heads/master 5b8bbee83 -> df538e505
RATIS-365. Implement RaftServer.getGroupIds() using the key set of ImplMap. Contributed by Tsz Wo Nicholas Sze. Project: http://git-wip-us.apache.org/repos/asf/incubator-ratis/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ratis/commit/df538e50 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ratis/tree/df538e50 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ratis/diff/df538e50 Branch: refs/heads/master Commit: df538e50531379488e768bc640721b00f4a43e6f Parents: 5b8bbee Author: Shashikant Banerjee <[email protected]> Authored: Sat Nov 17 10:01:45 2018 +0530 Committer: Shashikant Banerjee <[email protected]> Committed: Sat Nov 17 10:01:45 2018 +0530 ---------------------------------------------------------------------- .../protocol/AdminAsynchronousProtocol.java | 7 ++---- .../org/apache/ratis/server/RaftServer.java | 2 +- .../ratis/server/impl/RaftServerImpl.java | 9 ------- .../ratis/server/impl/RaftServerProxy.java | 25 ++++++++++---------- 4 files changed, 15 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/df538e50/ratis-common/src/main/java/org/apache/ratis/protocol/AdminAsynchronousProtocol.java ---------------------------------------------------------------------- diff --git a/ratis-common/src/main/java/org/apache/ratis/protocol/AdminAsynchronousProtocol.java b/ratis-common/src/main/java/org/apache/ratis/protocol/AdminAsynchronousProtocol.java index 4d8bd77..3e69bb8 100644 --- a/ratis-common/src/main/java/org/apache/ratis/protocol/AdminAsynchronousProtocol.java +++ b/ratis-common/src/main/java/org/apache/ratis/protocol/AdminAsynchronousProtocol.java @@ -17,16 +17,13 @@ */ package org.apache.ratis.protocol; -import java.io.IOException; import java.util.concurrent.CompletableFuture; /** Asynchronous version of {@link AdminProtocol}. */ public interface AdminAsynchronousProtocol { - CompletableFuture<GroupListReply> getGroupListAsync( - GroupListRequest request) throws IOException; + CompletableFuture<GroupListReply> getGroupListAsync(GroupListRequest request); - CompletableFuture<GroupInfoReply> getGroupInfoAsync( - GroupInfoRequest request) throws IOException; + CompletableFuture<GroupInfoReply> getGroupInfoAsync(GroupInfoRequest request); CompletableFuture<RaftClientReply> groupManagementAsync(GroupManagementRequest request); } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/df538e50/ratis-server/src/main/java/org/apache/ratis/server/RaftServer.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/main/java/org/apache/ratis/server/RaftServer.java b/ratis-server/src/main/java/org/apache/ratis/server/RaftServer.java index 47055b8..d7deb15 100644 --- a/ratis-server/src/main/java/org/apache/ratis/server/RaftServer.java +++ b/ratis-server/src/main/java/org/apache/ratis/server/RaftServer.java @@ -42,7 +42,7 @@ public interface RaftServer extends Closeable, RpcType.Get, RaftPeerId getId(); /** @return the group IDs the server is part of. */ - Iterable<RaftGroupId> getGroupIds() throws IOException; + Iterable<RaftGroupId> getGroupIds(); /** @return the groups the server is part of. */ Iterable<RaftGroup> getGroups() throws IOException; http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/df538e50/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java ---------------------------------------------------------------------- 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 0c0642c..21c2b59 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 @@ -344,15 +344,6 @@ public class RaftServerImpl implements RaftServerProtocol, RaftServerAsynchronou return infos; } - GroupListReply getGroupList(GroupListRequest request) { - Iterable<RaftGroupId> groupIds = null; - try { - groupIds = proxy.getGroupIds(); - } catch (IOException e) { - } - return new GroupListReply(request, groupIds); - } - GroupInfoReply getGroupInfo(GroupInfoRequest request) { return new GroupInfoReply(request, getRoleInfoProto(), state.getStorage().getStorageDir().hasMetaFile(), getCommitInfos(), getGroup()); http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/df538e50/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerProxy.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerProxy.java b/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerProxy.java index a4458f4..6c78ac9 100644 --- a/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerProxy.java +++ b/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerProxy.java @@ -61,7 +61,7 @@ public class RaftServerProxy implements RaftServer { /** * A map: {@link RaftGroupId} -> {@link RaftServerImpl} futures. * - * The map is synchronized for mutations and the bulk {@link #getAll()} method + * The map is synchronized for mutations and the bulk {@link #getGroupIds()}/{@link #getAll()} methods * but the (non-bulk) {@link #get(RaftGroupId)} and {@link #containsGroup(RaftGroupId)} methods are not. * The thread safety and atomicity guarantees for the non-bulk methods are provided by {@link ConcurrentMap}. */ @@ -103,6 +103,10 @@ public class RaftServerProxy implements RaftServer { .forEach(impl -> impl.shutdown(false)); } + synchronized List<RaftGroupId> getGroupIds() { + return new ArrayList<>(map.keySet()); + } + synchronized List<CompletableFuture<RaftServerImpl>> getAll() { return new ArrayList<>(map.values()); } @@ -217,8 +221,8 @@ public class RaftServerProxy implements RaftServer { } @Override - public Iterable<RaftGroupId> getGroupIds() throws IOException { - return getImpls().stream().map(RaftServerImpl::getGroupId).collect(Collectors.toList()); + public Iterable<RaftGroupId> getGroupIds() { + return impls.getGroupIds(); } @Override @@ -390,17 +394,13 @@ public class RaftServerProxy implements RaftServer { } @Override - public GroupListReply getGroupList(GroupListRequest request) - throws IOException { - return RaftServerImpl.waitForReply(getId(), request, getGroupListAsync(request), - r -> null); + public GroupListReply getGroupList(GroupListRequest request) { + return new GroupListReply(request, getGroupIds()); } @Override - public CompletableFuture<GroupListReply> getGroupListAsync( - GroupListRequest request) { - return getImplFuture(request.getRaftGroupId()).thenApplyAsync( - server -> server.getGroupList(request)); + public CompletableFuture<GroupListReply> getGroupListAsync(GroupListRequest request) { + return CompletableFuture.completedFuture(getGroupList(request)); } @Override @@ -409,12 +409,11 @@ public class RaftServerProxy implements RaftServer { } @Override - public CompletableFuture<GroupInfoReply> getGroupInfoAsync(GroupInfoRequest request) throws IOException { + public CompletableFuture<GroupInfoReply> getGroupInfoAsync(GroupInfoRequest request) { return getImplFuture(request.getRaftGroupId()).thenApplyAsync( server -> server.getGroupInfo(request)); } - /** * Handle a raft configuration change request from client. */
