From 54c74192605ebfdf6bec3f4430cfacb863cbf686 Mon Sep 17 00:00:00 2001 From: chenheng Date: Wed, 20 Apr 2016 14:31:26 +0800 Subject: [PATCH] HBASE-15674 HRegionLocator#getAllRegionLocations should put the results in cache --- .../apache/hadoop/hbase/client/ClusterConnection.java | 3 +++ .../hadoop/hbase/client/ConnectionImplementation.java | 3 ++- .../org/apache/hadoop/hbase/client/HRegionLocator.java | 7 ++++++- .../apache/hadoop/hbase/client/TestFromClientSide.java | 16 ++++++++++++++++ 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterConnection.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterConnection.java index d348ffc..3027761 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterConnection.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterConnection.java @@ -86,6 +86,9 @@ public interface ClusterConnection extends HConnection { @Override void clearRegionCache(); + + void cacheLocation(final TableName tableName, final RegionLocations location); + /** * Allows flushing the region cache of all locations that pertain to * tableName diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionImplementation.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionImplementation.java index 21e7e51..9a7dfc7 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionImplementation.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionImplementation.java @@ -927,7 +927,8 @@ class ConnectionImplementation implements ClusterConnection, Closeable { * @param tableName The table name. * @param location the new location */ - private void cacheLocation(final TableName tableName, final RegionLocations location) { + @Override + public void cacheLocation(final TableName tableName, final RegionLocations location) { metaCache.cacheLocation(tableName, location); } diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HRegionLocator.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HRegionLocator.java index 782ab66..4d2311d 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HRegionLocator.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HRegionLocator.java @@ -83,11 +83,16 @@ public class HRegionLocator implements RegionLocator { @Override public List getAllRegionLocations() throws IOException { + TableName tableName = getName(); List> locations = - MetaTableAccessor.getTableRegionsAndLocations(this.connection, getName()); + MetaTableAccessor.getTableRegionsAndLocations(this.connection, tableName); ArrayList regions = new ArrayList<>(locations.size()); for (Pair entry : locations) { regions.add(new HRegionLocation(entry.getFirst(), entry.getSecond())); + + } + if (regions.size() > 0) { + connection.cacheLocation(tableName, new RegionLocations(regions)); } return regions; } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java index 520f210..3549791 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java @@ -6141,4 +6141,20 @@ public class TestFromClientSide { } } } + + @Test + public void testRegionCache() throws IOException { + HTableDescriptor htd = new HTableDescriptor(TableName.valueOf("testRegionCache")); + HColumnDescriptor fam = new HColumnDescriptor(FAMILY); + htd.addFamily(fam); + byte[][] KEYS = HBaseTestingUtility.KEYS_FOR_HBA_CREATE_TABLE; + Admin admin = TEST_UTIL.getHBaseAdmin(); + admin.createTable(htd, KEYS); + HRegionLocator locator = + (HRegionLocator) admin.getConnection().getRegionLocator(htd.getTableName()); + List results = locator.getAllRegionLocations(); + int number = ((ConnectionImplementation)admin.getConnection()) + .getNumberOfCachedRegionLocations(htd.getTableName()); + assertEquals(results.size(), number); + } } -- 1.9.3 (Apple Git-50)