diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RpcRetryingCallerWithReadReplicas.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RpcRetryingCallerWithReadReplicas.java index f15ad02..a9959b9 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RpcRetryingCallerWithReadReplicas.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RpcRetryingCallerWithReadReplicas.java @@ -283,6 +283,11 @@ public class RpcRetryingCallerWithReadReplicas { RegionLocations rl; try { + if (!useCache && !tableName.equals(TableName.META_TABLE_NAME) && + RegionReplicaUtil.DEFAULT_REPLICA_ID == replicaId) { + HRegionLocation location = cConnection.getRegionLocation(tableName, row, true); + return new RegionLocations(location); + } rl = cConnection.locateRegion(tableName, row, useCache, true, replicaId); } catch (DoNotRetryIOException e) { throw e; @@ -300,7 +305,6 @@ public class RpcRetryingCallerWithReadReplicas { return rl; } - /** * A completion service for the RpcRetryingCallerFactory. * Keeps the list of the futures, and allows to cancel them all. diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java index 6fe6ede..5e4416f 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java @@ -264,7 +264,19 @@ public class TestAdmin { boolean ok = false; try { ht.get(get); - } catch (org.apache.hadoop.hbase.DoNotRetryIOException e) { + } catch (TableNotEnabledException e) { + ok = true; + } + ok = false; + // verify that scan encounters correct exception + Scan scan = new Scan(); + try { + ResultScanner scanner = ht.getScanner(scan); + Result res = null; + do { + res = scanner.next(); + } while (res != null); + } catch (TableNotEnabledException e) { ok = true; } assertTrue(ok);