From 194c71abf0842abc3436466209b49ca42384e7d4 Mon Sep 17 00:00:00 2001 From: zhaoyuan Date: Thu, 14 Jun 2018 17:31:20 +0800 Subject: [PATCH] update --- .../java/org/apache/hadoop/hbase/RegionLocations.java | 11 ++++++----- .../org/apache/hadoop/hbase/client/HRegionLocator.java | 15 ++++++--------- .../apache/hadoop/hbase/client/TestFromClientSide.java | 12 +++++++++--- 3 files changed, 21 insertions(+), 17 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..826cc74c58 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,10 +63,9 @@ public class RegionLocations { } index++; } - this.numNonNullElements = numNonNullElements; // account for the null elements in the array after maxReplicaIdIndex - maxReplicaId = maxReplicaId + (locations.length - (maxReplicaIdIndex + 1) ); + maxReplicaId = maxReplicaId + (locations.length - (maxReplicaIdIndex + 1)); if (maxReplicaId + 1 == locations.length) { this.locations = locations; @@ -81,6 +77,11 @@ 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..4e9c7b28cb 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,15 +85,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 100df38a44..15015cc4cd 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 @@ -6413,11 +6413,17 @@ public class TestFromClientSide { Admin admin = TEST_UTIL.getAdmin(); admin.createTable(htd, KEYS); HRegionLocator locator = - (HRegionLocator) admin.getConnection().getRegionLocator(htd.getTableName()); + (HRegionLocator) admin.getConnection().getRegionLocator(htd.getTableName()); List results = locator.getAllRegionLocations(); - int number = ((ConnectionImplementation)admin.getConnection()) - .getNumberOfCachedRegionLocations(htd.getTableName()); + ConnectionImplementation conn = ((ConnectionImplementation)admin.getConnection()); + int number = conn.getNumberOfCachedRegionLocations(htd.getTableName()); assertEquals(results.size(), number); + 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