You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zh...@apache.org on 2018/03/27 10:21:17 UTC
[31/50] [abbrv] hbase git commit: HBASE-20229
ConnectionImplementation.locateRegions() returns duplicated entries when
region replication is on
HBASE-20229 ConnectionImplementation.locateRegions() returns duplicated entries when region replication is on
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/ff5250ca
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/ff5250ca
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/ff5250ca
Branch: refs/heads/HBASE-19064
Commit: ff5250ca2b9367d9011ae74ce127bc6de579c6bd
Parents: 5b2d2de
Author: Toshihiro Suzuki <br...@gmail.com>
Authored: Mon Mar 26 15:03:45 2018 -0700
Committer: Huaxiang Sun <hs...@cloudera.com>
Committed: Mon Mar 26 15:09:20 2018 -0700
----------------------------------------------------------------------
.../hbase/client/ConnectionImplementation.java | 3 ++
.../client/TestConnectionImplementation.java | 36 ++++++++++++++++++++
2 files changed, 39 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/ff5250ca/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionImplementation.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionImplementation.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionImplementation.java
index 6408044..7723161 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionImplementation.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionImplementation.java
@@ -672,6 +672,9 @@ class ConnectionImplementation implements ClusterConnection, Closeable {
}
List<HRegionLocation> locations = new ArrayList<>();
for (RegionInfo regionInfo : regions) {
+ if (!RegionReplicaUtil.isDefaultReplica(regionInfo)) {
+ continue;
+ }
RegionLocations list = locateRegion(tableName, regionInfo.getStartKey(), useCache, true);
if (list != null) {
for (HRegionLocation loc : list.getRegionLocations()) {
http://git-wip-us.apache.org/repos/asf/hbase/blob/ff5250ca/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestConnectionImplementation.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestConnectionImplementation.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestConnectionImplementation.java
index 521317d..4d9f39b 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestConnectionImplementation.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestConnectionImplementation.java
@@ -29,6 +29,7 @@ import java.lang.reflect.Modifier;
import java.net.SocketTimeoutException;
import java.util.ArrayList;
import java.util.List;
+import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.ThreadLocalRandom;
@@ -37,6 +38,9 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.HBaseClassTestRule;
@@ -1044,4 +1048,36 @@ public class TestConnectionImplementation {
table.close();
connection.close();
}
+
+ @Test
+ public void testLocateRegionsWithRegionReplicas() throws IOException {
+ int regionReplication = 3;
+ byte[] family = Bytes.toBytes("cf");
+ TableName tableName = TableName.valueOf(name.getMethodName());
+
+ // Create a table with region replicas
+ TableDescriptorBuilder builder = TableDescriptorBuilder
+ .newBuilder(tableName)
+ .setRegionReplication(regionReplication)
+ .setColumnFamily(ColumnFamilyDescriptorBuilder.of(family));
+ TEST_UTIL.getAdmin().createTable(builder.build());
+
+ try (ConnectionImplementation con = (ConnectionImplementation) ConnectionFactory.
+ createConnection(TEST_UTIL.getConfiguration())) {
+ // Get locations of the regions of the table
+ List<HRegionLocation> locations = con.locateRegions(tableName, false, false);
+
+ // The size of the returned locations should be 3
+ assertEquals(regionReplication, locations.size());
+
+ // The replicaIds of the returned locations should be 0, 1 and 2
+ Set<Integer> expectedReplicaIds = IntStream.range(0, regionReplication).
+ boxed().collect(Collectors.toSet());
+ for (HRegionLocation location : locations) {
+ assertTrue(expectedReplicaIds.remove(location.getRegion().getReplicaId()));
+ }
+ } finally {
+ TEST_UTIL.deleteTable(tableName);
+ }
+ }
}