diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.java index 4da3077bd8c7..0a045148ed82 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.java @@ -219,9 +219,13 @@ private boolean tryComplete(LocateRequest req, CompletableFuture getRegionObserver() { public void preScannerOpen(ObserverContext c, Scan scan) throws IOException { RegionInfo region = c.getEnvironment().getRegionInfo(); + if (!USE_META_REPLICA && TableName.isMetaTableName(region.getTable())) { + assert region.getReplicaId() + == RegionReplicaUtil.DEFAULT_REPLICA_ID : "should read default meta region!"; + } if ( FAIL_PRIMARY_SCAN && TableName.isMetaTableName(region.getTable()) && region.getReplicaId() == RegionReplicaUtil.DEFAULT_REPLICA_ID @@ -117,11 +124,12 @@ public void tearDownAfterTest() { FAIL_PRIMARY_SCAN = false; } - private void testRead(boolean useMetaReplicas) + private void testRead() throws IOException, InterruptedException, ExecutionException { FAIL_PRIMARY_SCAN = true; Configuration conf = new Configuration(UTIL.getConfiguration()); - conf.setBoolean(HConstants.USE_META_REPLICAS, useMetaReplicas); + conf.setBoolean(HConstants.USE_META_REPLICAS, USE_META_REPLICA); + conf.set(LOCATOR_META_REPLICAS_MODE, CatalogReplicaMode.LOAD_BALANCE.toString()); conf.setLong(HConstants.HBASE_CLIENT_META_REPLICA_SCAN_TIMEOUT, TimeUnit.SECONDS.toMicros(1)); try (AsyncConnection conn = ConnectionFactory.createAsyncConnection(conf).get()) { Result result = FutureUtils.get(conn.getTableBuilder(TABLE_NAME) @@ -133,11 +141,13 @@ private void testRead(boolean useMetaReplicas) @Test(expected = RetriesExhaustedException.class) public void testNotUseMetaReplicas() throws IOException, InterruptedException, ExecutionException { - testRead(false); + USE_META_REPLICA = false; + testRead(); } @Test public void testUseMetaReplicas() throws IOException, InterruptedException, ExecutionException { - testRead(true); + USE_META_REPLICA = true; + testRead(); } }