You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by md...@apache.org on 2018/07/20 19:50:55 UTC

[03/29] hbase git commit: HBASE-20697 Can't cache All region locations of the specify table by calling table.getRegionLocator().getAllRegionLocations()

HBASE-20697 Can't cache All region locations of the specify table by calling table.getRegionLocator().getAllRegionLocations()

Signed-off-by: Guanghao Zhang <zg...@apache.org>


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

Branch: refs/heads/HBASE-20749
Commit: 1e0650955a58bfaf28e8075353f894141226a844
Parents: d7561ce
Author: zhaoyuan <zh...@youzan.com>
Authored: Tue Jul 10 15:03:05 2018 +0800
Committer: Guanghao Zhang <zg...@apache.org>
Committed: Wed Jul 11 10:52:06 2018 +0800

----------------------------------------------------------------------
 .../org/apache/hadoop/hbase/RegionLocations.java    | 11 ++++++-----
 .../apache/hadoop/hbase/client/HRegionLocator.java  | 16 ++++++----------
 .../hadoop/hbase/client/TestFromClientSide.java     |  7 +++++++
 3 files changed, 19 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/1e065095/hbase-client/src/main/java/org/apache/hadoop/hbase/RegionLocations.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/RegionLocations.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/RegionLocations.java
index 8889dc2..fd6f3c7 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/RegionLocations.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/RegionLocations.java
@@ -56,9 +56,6 @@ public class RegionLocations {
     int index = 0;
     for (HRegionLocation loc : locations) {
       if (loc != null) {
-        if (loc.getServerName() != null) {
-          numNonNullElements++;
-        }
         if (loc.getRegionInfo().getReplicaId() >= maxReplicaId) {
           maxReplicaId = loc.getRegionInfo().getReplicaId();
           maxReplicaIdIndex = index;
@@ -66,8 +63,6 @@ public class RegionLocations {
       }
       index++;
     }
-    this.numNonNullElements = numNonNullElements;
-
     // account for the null elements in the array after maxReplicaIdIndex
     maxReplicaId = maxReplicaId + (locations.length - (maxReplicaIdIndex + 1) );
 
@@ -81,6 +76,12 @@ public class RegionLocations {
         }
       }
     }
+    for (HRegionLocation loc : this.locations) {
+      if (loc != null && loc.getServerName() != null){
+        numNonNullElements++;
+      }
+    }
+    this.numNonNullElements = numNonNullElements;
   }
 
   public RegionLocations(Collection<HRegionLocation> locations) {

http://git-wip-us.apache.org/repos/asf/hbase/blob/1e065095/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 0231370..2559114 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
@@ -27,7 +27,6 @@ import org.apache.hadoop.hbase.HRegionInfo;
 import org.apache.hadoop.hbase.HRegionLocation;
 import org.apache.hadoop.hbase.MetaTableAccessor;
 import org.apache.hadoop.hbase.RegionLocations;
-import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.util.Pair;
 import org.apache.yetus.audience.InterfaceAudience;
@@ -85,15 +84,12 @@ public class HRegionLocator implements RegionLocator {
   @Override
   public List<HRegionLocation> getAllRegionLocations() throws IOException {
     TableName tableName = getName();
-    List<Pair<RegionInfo, ServerName>> locations =
-        MetaTableAccessor.getTableRegionsAndLocations(this.connection, tableName);
-    ArrayList<HRegionLocation> regions = new ArrayList<>(locations.size());
-    for (Pair<RegionInfo, ServerName> entry : locations) {
-      regions.add(new HRegionLocation(entry.getFirst(), entry.getSecond()));
-
-    }
-    if (regions.size() > 0) {
-      connection.cacheLocation(tableName, new RegionLocations(regions));
+    ArrayList<HRegionLocation> regions = new ArrayList<>();
+    for (RegionLocations locations : listRegionLocations()) {
+      for (HRegionLocation location : locations.getRegionLocations()) {
+        regions.add(location);
+      }
+      connection.cacheLocation(tableName, locations);
     }
     return regions;
   }

http://git-wip-us.apache.org/repos/asf/hbase/blob/1e065095/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 13fa59f..c4285b4 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
@@ -6417,6 +6417,13 @@ public class TestFromClientSide {
     int number = ((ConnectionImplementation)admin.getConnection())
       .getNumberOfCachedRegionLocations(htd.getTableName());
     assertEquals(results.size(), number);
+    ConnectionImplementation conn = ((ConnectionImplementation)admin.getConnection());
+    assertNotNull("Can't get cached location for row aaa",
+        conn.getCachedLocation(htd.getTableName(),Bytes.toBytes("aaa")));
+    for(byte[] startKey:HBaseTestingUtility.KEYS_FOR_HBA_CREATE_TABLE){
+      assertNotNull("Can't get cached location for row "+
+        Bytes.toString(startKey),(conn.getCachedLocation(htd.getTableName(),startKey)));
+    }
   }
 
   @Test