Skip to content

Commit 04937ba

Browse files
committed
HBASE-22158 RawAsyncHBaseAdmin.getTableSplits should filter out none default replicas
Signed-off-by: Guanghao Zhang <zghao@apache.org> Signed-off-by: Zheng Hu <openinx@gmail.com>
1 parent 28d1b76 commit 04937ba

File tree

2 files changed

+59
-27
lines changed

2 files changed

+59
-27
lines changed

hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -838,12 +838,13 @@ public CompletableFuture<List<RegionInfo>> getRegions(ServerName serverName) {
838838
@Override
839839
public CompletableFuture<List<RegionInfo>> getRegions(TableName tableName) {
840840
if (tableName.equals(META_TABLE_NAME)) {
841-
return connection.getLocator().getRegionLocation(tableName, null, null, operationTimeoutNs)
842-
.thenApply(loc -> Collections.singletonList(loc.getRegion()));
841+
return connection.registry.getMetaRegionLocation()
842+
.thenApply(locs -> Stream.of(locs.getRegionLocations()).map(HRegionLocation::getRegion)
843+
.collect(Collectors.toList()));
843844
} else {
844845
return AsyncMetaTableAccessor.getTableHRegionLocations(metaTable, Optional.of(tableName))
845-
.thenApply(
846-
locs -> locs.stream().map(loc -> loc.getRegion()).collect(Collectors.toList()));
846+
.thenApply(
847+
locs -> locs.stream().map(HRegionLocation::getRegion).collect(Collectors.toList()));
847848
}
848849
}
849850

@@ -3418,21 +3419,24 @@ public CompletableFuture<Void> disableTableReplication(TableName tableName) {
34183419

34193420
private CompletableFuture<byte[][]> getTableSplits(TableName tableName) {
34203421
CompletableFuture<byte[][]> future = new CompletableFuture<>();
3421-
addListener(getRegions(tableName), (regions, err2) -> {
3422-
if (err2 != null) {
3423-
future.completeExceptionally(err2);
3424-
return;
3425-
}
3426-
if (regions.size() == 1) {
3427-
future.complete(null);
3428-
} else {
3429-
byte[][] splits = new byte[regions.size() - 1][];
3430-
for (int i = 1; i < regions.size(); i++) {
3431-
splits[i - 1] = regions.get(i).getStartKey();
3422+
addListener(
3423+
getRegions(tableName).thenApply(regions -> regions.stream()
3424+
.filter(RegionReplicaUtil::isDefaultReplica).collect(Collectors.toList())),
3425+
(regions, err2) -> {
3426+
if (err2 != null) {
3427+
future.completeExceptionally(err2);
3428+
return;
34323429
}
3433-
future.complete(splits);
3434-
}
3435-
});
3430+
if (regions.size() == 1) {
3431+
future.complete(null);
3432+
} else {
3433+
byte[][] splits = new byte[regions.size() - 1][];
3434+
for (int i = 1; i < regions.size(); i++) {
3435+
splits[i - 1] = regions.get(i).getStartKey();
3436+
}
3437+
future.complete(splits);
3438+
}
3439+
});
34363440
return future;
34373441
}
34383442

@@ -3661,13 +3665,15 @@ public CompletableFuture<Void> cloneTableSchema(TableName tableName, TableName n
36613665
if (err3 != null) {
36623666
future.completeExceptionally(err3);
36633667
} else {
3664-
addListener(createTable(newTableDesc, splits), (result, err4) -> {
3665-
if (err4 != null) {
3666-
future.completeExceptionally(err4);
3667-
} else {
3668-
future.complete(result);
3669-
}
3670-
});
3668+
addListener(
3669+
splits != null ? createTable(newTableDesc, splits) : createTable(newTableDesc),
3670+
(result, err4) -> {
3671+
if (err4 != null) {
3672+
future.completeExceptionally(err4);
3673+
} else {
3674+
future.complete(result);
3675+
}
3676+
});
36713677
}
36723678
});
36733679
} else {
Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,11 @@
4343

4444
@RunWith(Parameterized.class)
4545
@Category({ LargeTests.class, ClientTests.class })
46-
public class TestAsyncRegionAdminApiWithRegionReplicas extends TestAsyncAdminBase {
46+
public class TestAsyncAdminWithRegionReplicas extends TestAsyncAdminBase {
4747

4848
@ClassRule
4949
public static final HBaseClassTestRule CLASS_RULE =
50-
HBaseClassTestRule.forClass(TestAsyncRegionAdminApiWithRegionReplicas.class);
50+
HBaseClassTestRule.forClass(TestAsyncAdminWithRegionReplicas.class);
5151

5252
@BeforeClass
5353
public static void setUpBeforeClass() throws Exception {
@@ -125,4 +125,30 @@ public void testMergeNonDefaultReplicas()
125125
assertThat(e.getCause(), instanceOf(IllegalArgumentException.class));
126126
}
127127
}
128+
129+
@Test
130+
public void testCloneTableSchema() throws IOException, InterruptedException, ExecutionException {
131+
createTableWithDefaultConf(tableName, 3);
132+
admin.cloneTableSchema(tableName, TableName.valueOf(tableName.getNameAsString() + "_new"), true)
133+
.get();
134+
}
135+
136+
@Test
137+
public void testGetTableRegions() throws InterruptedException, ExecutionException, IOException {
138+
List<RegionInfo> metaRegions = admin.getRegions(TableName.META_TABLE_NAME).get();
139+
assertEquals(3, metaRegions.size());
140+
for (int i = 0; i < 3; i++) {
141+
RegionInfo metaRegion = metaRegions.get(i);
142+
assertEquals(TableName.META_TABLE_NAME, metaRegion.getTable());
143+
assertEquals(i, metaRegion.getReplicaId());
144+
}
145+
createTableWithDefaultConf(tableName, 3);
146+
List<RegionInfo> regions = admin.getRegions(tableName).get();
147+
assertEquals(3, metaRegions.size());
148+
for (int i = 0; i < 3; i++) {
149+
RegionInfo region = regions.get(i);
150+
assertEquals(tableName, region.getTable());
151+
assertEquals(i, region.getReplicaId());
152+
}
153+
}
128154
}

0 commit comments

Comments
 (0)