Repository: hbase
Updated Branches:
  refs/heads/branch-1.3 c4d63d5c4 -> 5456b0d74


HBASE-15674 HRegionLocator#getAllRegionLocations should put the results in cache

Conflicts:
        
hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionImplementation.java
        
hbase-client/src/main/java/org/apache/hadoop/hbase/client/HRegionLocator.java


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/5456b0d7
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/5456b0d7
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/5456b0d7

Branch: refs/heads/branch-1.3
Commit: 5456b0d7442bbb35f31363ad9f79fb8226742ddc
Parents: c4d63d5
Author: chenheng <chenh...@apache.org>
Authored: Thu Apr 21 14:16:06 2016 +0800
Committer: chenheng <chenh...@apache.org>
Committed: Thu Apr 21 14:32:45 2016 +0800

----------------------------------------------------------------------
 .../hadoop/hbase/client/ClusterConnection.java     |  3 +++
 .../hadoop/hbase/client/ConnectionAdapter.java     |  6 ++++++
 .../hadoop/hbase/client/ConnectionManager.java     |  3 ++-
 .../hadoop/hbase/client/ConnectionUtils.java       |  1 +
 .../apache/hadoop/hbase/client/HRegionLocator.java |  6 +++++-
 .../hadoop/hbase/client/TestFromClientSide.java    | 17 +++++++++++++++++
 6 files changed, 34 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/5456b0d7/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterConnection.java
----------------------------------------------------------------------
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 f4d464f..ec7f471 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
@@ -83,6 +83,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
    * <code>tableName</code>

http://git-wip-us.apache.org/repos/asf/hbase/blob/5456b0d7/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionAdapter.java
----------------------------------------------------------------------
diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionAdapter.java
 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionAdapter.java
index 040fa6f..4e3e55e 100644
--- 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionAdapter.java
+++ 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionAdapter.java
@@ -244,6 +244,12 @@ abstract class ConnectionAdapter implements 
ClusterConnection {
     wrappedConnection.clearRegionCache(tableName);
   }
 
+
+  @Override
+  public void cacheLocation(TableName tableName, RegionLocations location) {
+    wrappedConnection.cacheLocation(tableName, location);
+  }
+
   @Override
   public void deleteCachedRegionLocation(HRegionLocation location) {
     wrappedConnection.deleteCachedRegionLocation(location);

http://git-wip-us.apache.org/repos/asf/hbase/blob/5456b0d7/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionManager.java
----------------------------------------------------------------------
diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionManager.java
 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionManager.java
index 15e0a39..a000a41 100644
--- 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionManager.java
+++ 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionManager.java
@@ -1373,7 +1373,8 @@ class ConnectionManager {
      * @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);
     }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/5456b0d7/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionUtils.java
----------------------------------------------------------------------
diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionUtils.java
 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionUtils.java
index 647295e..63861be 100644
--- 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionUtils.java
+++ 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionUtils.java
@@ -24,6 +24,7 @@ import java.util.concurrent.ExecutorService;
 import org.apache.commons.logging.Log;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.HConstants;
+import org.apache.hadoop.hbase.RegionLocations;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.classification.InterfaceAudience;

http://git-wip-us.apache.org/repos/asf/hbase/blob/5456b0d7/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HRegionLocator.java
----------------------------------------------------------------------
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 fa85653..d270607 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
@@ -85,12 +85,16 @@ public class HRegionLocator implements RegionLocator {
 
   @Override
   public List<HRegionLocation> getAllRegionLocations() throws IOException {
+    TableName tableName = getName();
     NavigableMap<HRegionInfo, ServerName> locations =
-        MetaScanner.allTableRegions(this.connection, getName());
+        MetaScanner.allTableRegions(this.connection, tableName);
     ArrayList<HRegionLocation> regions = new ArrayList<>(locations.size());
     for (Entry<HRegionInfo, ServerName> entry : locations.entrySet()) {
       regions.add(new HRegionLocation(entry.getKey(), entry.getValue()));
     }
+    if (regions.size() > 0) {
+      connection.cacheLocation(tableName, new RegionLocations(regions));
+    }
     return regions;
   }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/5456b0d7/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java
----------------------------------------------------------------------
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 97d78cb..7dfa633 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
@@ -43,6 +43,7 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.atomic.AtomicReference;
 
+import org.apache.hadoop.mapreduce.Cluster;
 import org.apache.log4j.Level;
 import org.apache.commons.lang.ArrayUtils;
 import org.apache.commons.logging.Log;
@@ -6193,4 +6194,20 @@ public class TestFromClientSide {
     assertNull(s.next());
     table.close();
   }
+
+  @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<HRegionLocation> results = locator.getAllRegionLocations();
+    int number = 
((ConnectionManager.HConnectionImplementation)admin.getConnection())
+      .getNumberOfCachedRegionLocations(htd.getTableName());
+    assertEquals(results.size(), number);
+  }
 }

Reply via email to