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) {