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

zhangduo pushed a commit to branch branch-2.4
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/branch-2.4 by this push:
     new 414deee  HBASE-26015 Should implement getRegionServers(boolean) method 
in Asyn… (#3406)
414deee is described below

commit 414deeea834c8b17520a71cb7fdde79a8542f236
Author: GeorryHuang <[email protected]>
AuthorDate: Sun Jun 27 21:58:18 2021 +0800

    HBASE-26015 Should implement getRegionServers(boolean) method in Asyn… 
(#3406)
    
    Signed-off-by: Duo Zhang <[email protected]>
---
 .../org/apache/hadoop/hbase/client/AsyncAdmin.java | 30 ++++++++++++++++++++++
 .../hbase/client/TestAsyncClusterAdminApi.java     | 21 +++++++++++++++
 2 files changed, 51 insertions(+)

diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java
index 5e68ea8..6b8fda7 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java
@@ -17,6 +17,8 @@
  */
 package org.apache.hadoop.hbase.client;
 
+import static org.apache.hadoop.hbase.util.FutureUtils.addListener;
+
 import com.google.protobuf.RpcChannel;
 import java.util.Arrays;
 import java.util.Collection;
@@ -49,6 +51,8 @@ import org.apache.hadoop.hbase.security.access.Permission;
 import org.apache.hadoop.hbase.security.access.UserPermission;
 import org.apache.yetus.audience.InterfaceAudience;
 
+import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;
+
 /**
  * The asynchronous administrative API for HBase.
  * @since 2.0.0
@@ -1058,6 +1062,32 @@ public interface AsyncAdmin {
         .thenApply(ClusterMetrics::getServersName);
   }
 
+  default CompletableFuture<Collection<ServerName>> getRegionServers(
+    boolean excludeDecommissionedRS) {
+    CompletableFuture<Collection<ServerName>> future = new 
CompletableFuture<>();
+    addListener(
+      
getClusterMetrics(EnumSet.of(Option.SERVERS_NAME)).thenApply(ClusterMetrics::getServersName),
+      (allServers, err) -> {
+        if (err != null) {
+          future.completeExceptionally(err);
+        } else {
+          if (!excludeDecommissionedRS) {
+            future.complete(allServers);
+          } else {
+            addListener(listDecommissionedRegionServers(), (decomServers, 
decomErr) -> {
+              if (decomErr != null) {
+                future.completeExceptionally(decomErr);
+              } else {
+                future.complete(allServers.stream().filter(s -> 
!decomServers.contains(s))
+                  .collect(ImmutableList.toImmutableList()));
+              }
+            });
+          }
+        }
+      });
+    return future;
+  }
+
   /**
    * @return a list of master coprocessors wrapped by {@link CompletableFuture}
    */
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncClusterAdminApi.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncClusterAdminApi.java
index d9f8282..0afed41 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncClusterAdminApi.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncClusterAdminApi.java
@@ -24,6 +24,7 @@ import static org.junit.Assert.assertTrue;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.EnumSet;
 import java.util.List;
 import java.util.Map;
@@ -262,6 +263,26 @@ public class TestAsyncClusterAdminApi extends 
TestAsyncAdminBase {
     }
   }
 
+  @Test
+  public void testGetRegionServers() throws Exception{
+    List<ServerName> serverNames = new 
ArrayList<>(admin.getRegionServers(true).get());
+    assertEquals(2, serverNames.size());
+
+    List<ServerName> serversToDecom = new ArrayList<>();
+    ServerName serverToDecommission = serverNames.get(0);
+
+    serversToDecom.add(serverToDecommission);
+    admin.decommissionRegionServers(serversToDecom, false).join();
+
+    assertEquals(1, admin.getRegionServers(true).get().size());
+    assertEquals(2, admin.getRegionServers(false).get().size());
+
+    admin.recommissionRegionServer(serverToDecommission, 
Collections.emptyList()).join();
+
+    assertEquals(2, admin.getRegionServers(true).get().size());
+    assertEquals(2, admin.getRegionServers(false).get().size());
+  }
+
   private void compareRegionLoads(Collection<RegionMetrics> regionLoadCluster,
       Collection<RegionMetrics> regionLoads) {
 

Reply via email to