Repository: hbase Updated Branches: refs/heads/branch-2.1 e1673bb0b -> 8de69db14
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/8de69db1 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/8de69db1 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/8de69db1 Branch: refs/heads/branch-2.1 Commit: 8de69db1438d78ec63f83bfff7fda92d5799ee44 Parents: e1673bb Author: zhaoyuan <zhaoy...@youzan.com> Authored: Tue Jul 10 15:03:05 2018 +0800 Committer: Guanghao Zhang <zg...@apache.org> Committed: Wed Jul 11 11:17:41 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/8de69db1/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/8de69db1/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/8de69db1/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