You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zh...@apache.org on 2019/04/05 14:18:55 UTC
[hbase] branch branch-2.2 updated: HBASE-22158
RawAsyncHBaseAdmin.getTableSplits should filter out none default replicas
This is an automated email from the ASF dual-hosted git repository.
zhangduo pushed a commit to branch branch-2.2
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-2.2 by this push:
new d526a7c HBASE-22158 RawAsyncHBaseAdmin.getTableSplits should filter out none default replicas
d526a7c is described below
commit d526a7c42726a256910f249c36ea3db8268e5767
Author: Duo Zhang <zh...@apache.org>
AuthorDate: Wed Apr 3 18:30:48 2019 +0800
HBASE-22158 RawAsyncHBaseAdmin.getTableSplits should filter out none default replicas
Signed-off-by: Guanghao Zhang <zg...@apache.org>
Signed-off-by: Zheng Hu <op...@gmail.com>
---
.../hadoop/hbase/client/RawAsyncHBaseAdmin.java | 56 ++++++++++++----------
....java => TestAsyncAdminWithRegionReplicas.java} | 30 +++++++++++-
2 files changed, 59 insertions(+), 27 deletions(-)
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java
index 43cdc41..851c70a 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java
@@ -842,12 +842,13 @@ class RawAsyncHBaseAdmin implements AsyncAdmin {
@Override
public CompletableFuture<List<RegionInfo>> getRegions(TableName tableName) {
if (tableName.equals(META_TABLE_NAME)) {
- return connection.getLocator().getRegionLocation(tableName, null, null, operationTimeoutNs)
- .thenApply(loc -> Collections.singletonList(loc.getRegion()));
+ return connection.registry.getMetaRegionLocation()
+ .thenApply(locs -> Stream.of(locs.getRegionLocations()).map(HRegionLocation::getRegion)
+ .collect(Collectors.toList()));
} else {
return AsyncMetaTableAccessor.getTableHRegionLocations(metaTable, Optional.of(tableName))
- .thenApply(
- locs -> locs.stream().map(loc -> loc.getRegion()).collect(Collectors.toList()));
+ .thenApply(
+ locs -> locs.stream().map(HRegionLocation::getRegion).collect(Collectors.toList()));
}
}
@@ -3412,21 +3413,24 @@ class RawAsyncHBaseAdmin implements AsyncAdmin {
private CompletableFuture<byte[][]> getTableSplits(TableName tableName) {
CompletableFuture<byte[][]> future = new CompletableFuture<>();
- addListener(getRegions(tableName), (regions, err2) -> {
- if (err2 != null) {
- future.completeExceptionally(err2);
- return;
- }
- if (regions.size() == 1) {
- future.complete(null);
- } else {
- byte[][] splits = new byte[regions.size() - 1][];
- for (int i = 1; i < regions.size(); i++) {
- splits[i - 1] = regions.get(i).getStartKey();
+ addListener(
+ getRegions(tableName).thenApply(regions -> regions.stream()
+ .filter(RegionReplicaUtil::isDefaultReplica).collect(Collectors.toList())),
+ (regions, err2) -> {
+ if (err2 != null) {
+ future.completeExceptionally(err2);
+ return;
}
- future.complete(splits);
- }
- });
+ if (regions.size() == 1) {
+ future.complete(null);
+ } else {
+ byte[][] splits = new byte[regions.size() - 1][];
+ for (int i = 1; i < regions.size(); i++) {
+ splits[i - 1] = regions.get(i).getStartKey();
+ }
+ future.complete(splits);
+ }
+ });
return future;
}
@@ -3655,13 +3659,15 @@ class RawAsyncHBaseAdmin implements AsyncAdmin {
if (err3 != null) {
future.completeExceptionally(err3);
} else {
- addListener(createTable(newTableDesc, splits), (result, err4) -> {
- if (err4 != null) {
- future.completeExceptionally(err4);
- } else {
- future.complete(result);
- }
- });
+ addListener(
+ splits != null ? createTable(newTableDesc, splits) : createTable(newTableDesc),
+ (result, err4) -> {
+ if (err4 != null) {
+ future.completeExceptionally(err4);
+ } else {
+ future.complete(result);
+ }
+ });
}
});
} else {
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncRegionAdminApiWithRegionReplicas.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncAdminWithRegionReplicas.java
similarity index 81%
rename from hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncRegionAdminApiWithRegionReplicas.java
rename to hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncAdminWithRegionReplicas.java
index 13e5f45..17bd671 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncRegionAdminApiWithRegionReplicas.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncAdminWithRegionReplicas.java
@@ -43,11 +43,11 @@ import org.junit.runners.Parameterized;
@RunWith(Parameterized.class)
@Category({ LargeTests.class, ClientTests.class })
-public class TestAsyncRegionAdminApiWithRegionReplicas extends TestAsyncAdminBase {
+public class TestAsyncAdminWithRegionReplicas extends TestAsyncAdminBase {
@ClassRule
public static final HBaseClassTestRule CLASS_RULE =
- HBaseClassTestRule.forClass(TestAsyncRegionAdminApiWithRegionReplicas.class);
+ HBaseClassTestRule.forClass(TestAsyncAdminWithRegionReplicas.class);
@BeforeClass
public static void setUpBeforeClass() throws Exception {
@@ -125,4 +125,30 @@ public class TestAsyncRegionAdminApiWithRegionReplicas extends TestAsyncAdminBas
assertThat(e.getCause(), instanceOf(IllegalArgumentException.class));
}
}
+
+ @Test
+ public void testCloneTableSchema() throws IOException, InterruptedException, ExecutionException {
+ createTableWithDefaultConf(tableName, 3);
+ admin.cloneTableSchema(tableName, TableName.valueOf(tableName.getNameAsString() + "_new"), true)
+ .get();
+ }
+
+ @Test
+ public void testGetTableRegions() throws InterruptedException, ExecutionException, IOException {
+ List<RegionInfo> metaRegions = admin.getRegions(TableName.META_TABLE_NAME).get();
+ assertEquals(3, metaRegions.size());
+ for (int i = 0; i < 3; i++) {
+ RegionInfo metaRegion = metaRegions.get(i);
+ assertEquals(TableName.META_TABLE_NAME, metaRegion.getTable());
+ assertEquals(i, metaRegion.getReplicaId());
+ }
+ createTableWithDefaultConf(tableName, 3);
+ List<RegionInfo> regions = admin.getRegions(tableName).get();
+ assertEquals(3, metaRegions.size());
+ for (int i = 0; i < 3; i++) {
+ RegionInfo region = regions.get(i);
+ assertEquals(tableName, region.getTable());
+ assertEquals(i, region.getReplicaId());
+ }
+ }
}