HBASE-26015 Should implement getRegionServers(boolean) method in Asyn… (#3406)
Signed-off-by: Duo Zhang <zhangduo@apache.org>
This commit is contained in:
parent
886a36af0e
commit
414deeea83
|
@ -17,6 +17,8 @@
|
||||||
*/
|
*/
|
||||||
package org.apache.hadoop.hbase.client;
|
package org.apache.hadoop.hbase.client;
|
||||||
|
|
||||||
|
import static org.apache.hadoop.hbase.util.FutureUtils.addListener;
|
||||||
|
|
||||||
import com.google.protobuf.RpcChannel;
|
import com.google.protobuf.RpcChannel;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
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.hadoop.hbase.security.access.UserPermission;
|
||||||
import org.apache.yetus.audience.InterfaceAudience;
|
import org.apache.yetus.audience.InterfaceAudience;
|
||||||
|
|
||||||
|
import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The asynchronous administrative API for HBase.
|
* The asynchronous administrative API for HBase.
|
||||||
* @since 2.0.0
|
* @since 2.0.0
|
||||||
|
@ -1058,6 +1062,32 @@ public interface AsyncAdmin {
|
||||||
.thenApply(ClusterMetrics::getServersName);
|
.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}
|
* @return a list of master coprocessors wrapped by {@link CompletableFuture}
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -24,6 +24,7 @@ import static org.junit.Assert.assertTrue;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
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,
|
private void compareRegionLoads(Collection<RegionMetrics> regionLoadCluster,
|
||||||
Collection<RegionMetrics> regionLoads) {
|
Collection<RegionMetrics> regionLoads) {
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue