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.
    */

Reply via email to