From 4570727d53eded8c1fb62e63599550fa4ba2270f Mon Sep 17 00:00:00 2001 From: zhaoyuan Date: Tue, 10 Jul 2018 15:03:05 +0800 Subject: [PATCH] update --- .../java/org/apache/hadoop/hbase/RegionLocations.java | 11 ++++++----- .../org/apache/hadoop/hbase/client/HRegionLocator.java | 16 ++++++---------- .../apache/hadoop/hbase/client/TestFromClientSide.java | 7 +++++++ 3 files changed, 19 insertions(+), 15 deletions(-) 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 8889dc2baa..fd6f3c7e71 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 locations) { 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 0231370b5d..255911471e 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 getAllRegionLocations() throws IOException { TableName tableName = getName(); - List> locations = - 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)); + ArrayList regions = new ArrayList<>(); + for (RegionLocations locations : listRegionLocations()) { + for (HRegionLocation location : locations.getRegionLocations()) { + regions.add(location); + } + connection.cacheLocation(tableName, locations); } 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 13fa59f2a5..c4285b4468 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 -- 2.13.3