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 2021/07/26 08:58:52 UTC

[hbase] branch master updated: HBASE-26119 Polish TestAsyncNonMetaRegionLocator (#3526)

This is an automated email from the ASF dual-hosted git repository.

zhangduo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/master by this push:
     new f0324a7  HBASE-26119 Polish TestAsyncNonMetaRegionLocator (#3526)
f0324a7 is described below

commit f0324a7516a42201e10e936b7d9b066f22b4c2d9
Author: Duo Zhang <zh...@apache.org>
AuthorDate: Mon Jul 26 16:57:49 2021 +0800

    HBASE-26119 Polish TestAsyncNonMetaRegionLocator (#3526)
    
    Signed-off-by: Xin Sun <dd...@gmail.com>
---
 .../client/TestAsyncNonMetaRegionLocator.java      | 105 ++++++++++-----------
 1 file changed, 48 insertions(+), 57 deletions(-)

diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocator.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocator.java
index 44b954e..576238c 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocator.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocator.java
@@ -53,14 +53,14 @@ import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;
 import org.junit.After;
 import org.junit.AfterClass;
+import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.ClassRule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.junit.runners.Parameterized.Parameter;
 
 import org.apache.hbase.thirdparty.com.google.common.io.Closeables;
 
@@ -72,42 +72,37 @@ public class TestAsyncNonMetaRegionLocator {
   public static final HBaseClassTestRule CLASS_RULE =
     HBaseClassTestRule.forClass(TestAsyncNonMetaRegionLocator.class);
 
-  private static final Logger LOG = LoggerFactory.getLogger(TestAsyncNonMetaRegionLocator.class);
-
   private static final HBaseTestingUtil TEST_UTIL = new HBaseTestingUtil();
 
-  private static TableName TABLE_NAME = TableName.valueOf("async");
+  private static final TableName TABLE_NAME = TableName.valueOf("async");
 
   private static byte[] FAMILY = Bytes.toBytes("cf");
-  private static final int META_STOREFILE_REFRESH_PERIOD = 100;
   private static final int NB_SERVERS = 4;
-  private static int numOfMetaReplica = NB_SERVERS - 1;
+  private static final int NUM_OF_META_REPLICA = NB_SERVERS - 1;
 
-  private static AsyncConnectionImpl CONN;
+  private static byte[][] SPLIT_KEYS;
 
-  private static AsyncNonMetaRegionLocator LOCATOR;
-  private static ConnectionRegistry registry;
+  private AsyncConnectionImpl conn;
+  private AsyncNonMetaRegionLocator locator;
 
-  private static byte[][] SPLIT_KEYS;
-  private CatalogReplicaMode metaReplicaMode;
+  @Parameter
+  public CatalogReplicaMode metaReplicaMode;
 
   @BeforeClass
   public static void setUp() throws Exception {
     Configuration conf = TEST_UTIL.getConfiguration();
     // Enable hbase:meta replication.
     conf.setBoolean(ServerRegionReplicaUtil.REGION_REPLICA_REPLICATION_CATALOG_CONF_KEY, true);
-    conf.setLong("replication.source.sleepforretries", 10);    // 10 ms
+    conf.setLong("replication.source.sleepforretries", 10); // 10 ms
 
     TEST_UTIL.startMiniCluster(NB_SERVERS);
     Admin admin = TEST_UTIL.getAdmin();
     admin.balancerSwitch(false, true);
 
     // Enable hbase:meta replication.
-    HBaseTestingUtil.setReplicas(admin, TableName.META_TABLE_NAME, numOfMetaReplica);
-    TEST_UTIL.waitFor(30000, () -> TEST_UTIL.getMiniHBaseCluster().getRegions(
-      TableName.META_TABLE_NAME).size() >= numOfMetaReplica);
-
-    registry = ConnectionRegistryFactory.getRegistry(TEST_UTIL.getConfiguration());
+    HBaseTestingUtil.setReplicas(admin, TableName.META_TABLE_NAME, NUM_OF_META_REPLICA);
+    TEST_UTIL.waitFor(30000, () -> TEST_UTIL.getMiniHBaseCluster()
+      .getRegions(TableName.META_TABLE_NAME).size() >= NUM_OF_META_REPLICA);
 
     SPLIT_KEYS = new byte[8][];
     for (int i = 111; i < 999; i += 111) {
@@ -117,41 +112,37 @@ public class TestAsyncNonMetaRegionLocator {
 
   @AfterClass
   public static void tearDown() throws Exception {
-    Closeables.close(CONN, true);
     TEST_UTIL.shutdownMiniCluster();
   }
 
+  @Before
+  public void setUpBeforeTest() throws InterruptedException, ExecutionException, IOException {
+    Configuration c = new Configuration(TEST_UTIL.getConfiguration());
+    // Enable meta replica LoadBalance mode for this connection.
+    c.set(RegionLocator.LOCATOR_META_REPLICAS_MODE, metaReplicaMode.toString());
+    ConnectionRegistry registry =
+      ConnectionRegistryFactory.getRegistry(TEST_UTIL.getConfiguration());
+    conn =
+      new AsyncConnectionImpl(c, registry, registry.getClusterId().get(), null, User.getCurrent());
+    locator = new AsyncNonMetaRegionLocator(conn);
+  }
+
   @After
   public void tearDownAfterTest() throws IOException {
     Admin admin = TEST_UTIL.getAdmin();
     if (admin.tableExists(TABLE_NAME)) {
       if (admin.isTableEnabled(TABLE_NAME)) {
-        TEST_UTIL.getAdmin().disableTable(TABLE_NAME);
+        admin.disableTable(TABLE_NAME);
       }
-      TEST_UTIL.getAdmin().deleteTable(TABLE_NAME);
+      admin.deleteTable(TABLE_NAME);
     }
-    LOCATOR.clearCache(TABLE_NAME);
+    Closeables.close(conn, true);
   }
 
   @Parameterized.Parameters
   public static Collection<Object[]> parameters() {
-    return Arrays.asList(new Object[][] {
-      { null },
-      { CatalogReplicaMode.LOAD_BALANCE.toString() }
-    });
-  }
-
-  public TestAsyncNonMetaRegionLocator(String clientMetaReplicaMode) throws Exception {
-    Configuration c = new Configuration(TEST_UTIL.getConfiguration());
-    // Enable meta replica LoadBalance mode for this connection.
-    if (clientMetaReplicaMode != null) {
-      c.set(RegionLocator.LOCATOR_META_REPLICAS_MODE, clientMetaReplicaMode);
-      metaReplicaMode = CatalogReplicaMode.fromString(clientMetaReplicaMode);
-    }
-
-    CONN = new AsyncConnectionImpl(c, registry,
-      registry.getClusterId().get(), null, User.getCurrent());
-    LOCATOR = new AsyncNonMetaRegionLocator(CONN);
+    return Arrays
+      .asList(new Object[][] { { CatalogReplicaMode.NONE }, { CatalogReplicaMode.LOAD_BALANCE } });
   }
 
   private void createSingleRegionTable() throws IOException, InterruptedException {
@@ -160,8 +151,8 @@ public class TestAsyncNonMetaRegionLocator {
   }
 
   private CompletableFuture<HRegionLocation> getDefaultRegionLocation(TableName tableName,
-      byte[] row, RegionLocateType locateType, boolean reload) {
-    return LOCATOR
+    byte[] row, RegionLocateType locateType, boolean reload) {
+    return locator
       .getRegionLocations(tableName, row, RegionReplicaUtil.DEFAULT_REPLICA_ID, locateType, reload)
       .thenApply(RegionLocations::getDefaultRegionLocation);
   }
@@ -191,7 +182,7 @@ public class TestAsyncNonMetaRegionLocator {
   }
 
   private void assertLocEquals(byte[] startKey, byte[] endKey, ServerName serverName,
-      HRegionLocation loc) {
+    HRegionLocation loc) {
     RegionInfo info = loc.getRegion();
     assertEquals(TABLE_NAME, info.getTable());
     assertArrayEquals(startKey, info.getStartKey());
@@ -261,7 +252,7 @@ public class TestAsyncNonMetaRegionLocator {
       }
     }));
 
-    LOCATOR.clearCache(TABLE_NAME);
+    locator.clearCache(TABLE_NAME);
     IntStream.range(0, 2).forEach(n -> IntStream.range(0, startKeys.length).forEach(i -> {
       try {
         assertLocEquals(startKeys[i], i == startKeys.length - 1 ? EMPTY_END_ROW : startKeys[i + 1],
@@ -272,7 +263,7 @@ public class TestAsyncNonMetaRegionLocator {
       }
     }));
 
-    LOCATOR.clearCache(TABLE_NAME);
+    locator.clearCache(TABLE_NAME);
     byte[][] endKeys = getEndKeys();
     IntStream.range(0, 2).forEach(
       n -> IntStream.range(0, endKeys.length).map(i -> endKeys.length - 1 - i).forEach(i -> {
@@ -304,11 +295,11 @@ public class TestAsyncNonMetaRegionLocator {
     // Should be same as it is in cache
     assertSame(loc,
       getDefaultRegionLocation(TABLE_NAME, EMPTY_START_ROW, RegionLocateType.CURRENT, false).get());
-    LOCATOR.updateCachedLocationOnError(loc, null);
+    locator.updateCachedLocationOnError(loc, null);
     // null error will not trigger a cache cleanup
     assertSame(loc,
       getDefaultRegionLocation(TABLE_NAME, EMPTY_START_ROW, RegionLocateType.CURRENT, false).get());
-    LOCATOR.updateCachedLocationOnError(loc, new NotServingRegionException());
+    locator.updateCachedLocationOnError(loc, new NotServingRegionException());
     assertLocEquals(EMPTY_START_ROW, EMPTY_END_ROW, newServerName,
       getDefaultRegionLocation(TABLE_NAME, EMPTY_START_ROW, RegionLocateType.CURRENT, false).get());
   }
@@ -347,7 +338,7 @@ public class TestAsyncNonMetaRegionLocator {
     byte[][] endKeys = getEndKeys();
     ServerName[] serverNames = getLocations(startKeys);
     for (int i = 0; i < 100; i++) {
-      LOCATOR.clearCache(TABLE_NAME);
+      locator.clearCache(TABLE_NAME);
       List<CompletableFuture<HRegionLocation>> futures =
         IntStream.range(0, 1000).mapToObj(n -> String.format("%03d", n)).map(s -> Bytes.toBytes(s))
           .map(r -> getDefaultRegionLocation(TABLE_NAME, r, RegionLocateType.CURRENT, false))
@@ -397,8 +388,9 @@ public class TestAsyncNonMetaRegionLocator {
     TEST_UTIL.waitFor(3000, new ExplainingPredicate<Exception>() {
       @Override
       public boolean evaluate() throws Exception {
-        HRegionLocation loc = getDefaultRegionLocation(TABLE_NAME, EMPTY_START_ROW,
-          RegionLocateType.CURRENT, true).get();
+        HRegionLocation loc =
+          getDefaultRegionLocation(TABLE_NAME, EMPTY_START_ROW, RegionLocateType.CURRENT, true)
+            .get();
         return newServerName.equals(loc.getServerName());
       }
 
@@ -418,7 +410,7 @@ public class TestAsyncNonMetaRegionLocator {
   // Testcase for HBASE-20822
   @Test
   public void testLocateBeforeLastRegion()
-      throws IOException, InterruptedException, ExecutionException {
+    throws IOException, InterruptedException, ExecutionException {
     createMultiRegionTable();
     getDefaultRegionLocation(TABLE_NAME, SPLIT_KEYS[0], RegionLocateType.CURRENT, false).join();
     HRegionLocation loc =
@@ -436,14 +428,14 @@ public class TestAsyncNonMetaRegionLocator {
 
       @Override
       public void updateCachedLocationOnError(HRegionLocation loc, Throwable error)
-          throws Exception {
-        LOCATOR.updateCachedLocationOnError(loc, error);
+        throws Exception {
+        locator.updateCachedLocationOnError(loc, error);
       }
 
       @Override
       public RegionLocations getRegionLocations(TableName tableName, int replicaId, boolean reload)
-          throws Exception {
-        return LOCATOR.getRegionLocations(tableName, EMPTY_START_ROW, replicaId,
+        throws Exception {
+        return locator.getRegionLocations(tableName, EMPTY_START_ROW, replicaId,
           RegionLocateType.CURRENT, reload).get();
       }
     });
@@ -464,9 +456,8 @@ public class TestAsyncNonMetaRegionLocator {
   public void testConcurrentUpdateCachedLocationOnError() throws Exception {
     createSingleRegionTable();
     HRegionLocation loc =
-        getDefaultRegionLocation(TABLE_NAME, EMPTY_START_ROW, RegionLocateType.CURRENT, false)
-            .get();
+      getDefaultRegionLocation(TABLE_NAME, EMPTY_START_ROW, RegionLocateType.CURRENT, false).get();
     IntStream.range(0, 100).parallel()
-        .forEach(i -> LOCATOR.updateCachedLocationOnError(loc, new NotServingRegionException()));
+      .forEach(i -> locator.updateCachedLocationOnError(loc, new NotServingRegionException()));
   }
 }