hbase-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From open...@apache.org
Subject [hbase] 05/14: HBASE-22158 RawAsyncHBaseAdmin.getTableSplits should filter out none default replicas
Date Mon, 08 Apr 2019 07:45:54 GMT
This is an automated email from the ASF dual-hosted git repository.

openinx pushed a commit to branch HBASE-21879
in repository https://gitbox.apache.org/repos/asf/hbase.git

commit 5243c6a3d6a02ab2bfefead496737cc0bbc3a690
Author: Duo Zhang <zhangduo@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 <zghao@apache.org>
    Signed-off-by: Zheng Hu <openinx@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 6c89fc8..1eaaa88 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
@@ -838,12 +838,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()));
     }
   }
 
@@ -3418,21 +3419,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;
   }
 
@@ -3661,13 +3665,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());
+    }
+  }
 }


Mime
View raw message