You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zy...@apache.org on 2018/07/10 04:39:05 UTC
[43/50] [abbrv] hbase git commit: HBASE-20822
TestAsyncNonMetaRegionLocator is flakey
HBASE-20822 TestAsyncNonMetaRegionLocator is flakey
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/b5222f88
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/b5222f88
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/b5222f88
Branch: refs/heads/HBASE-18477
Commit: b5222f88b21214cf21637d71f00e511ca93723e0
Parents: 6df7f23
Author: zhangduo <zh...@apache.org>
Authored: Sun Jul 8 21:12:27 2018 +0800
Committer: zhangduo <zh...@apache.org>
Committed: Mon Jul 9 14:56:37 2018 +0800
----------------------------------------------------------------------
.../hbase/client/AsyncNonMetaRegionLocator.java | 5 +++--
.../client/TestAsyncNonMetaRegionLocator.java | 21 +++++++++++++++-----
2 files changed, 19 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/b5222f88/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.java
index 9756d06..7e3d56c 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.java
@@ -334,14 +334,15 @@ class AsyncNonMetaRegionLocator {
private HRegionLocation locateRowBeforeInCache(TableCache tableCache, TableName tableName,
byte[] row) {
+ boolean isEmptyStopRow = isEmptyStopRow(row);
Map.Entry<byte[], HRegionLocation> entry =
- isEmptyStopRow(row) ? tableCache.cache.lastEntry() : tableCache.cache.lowerEntry(row);
+ isEmptyStopRow ? tableCache.cache.lastEntry() : tableCache.cache.lowerEntry(row);
if (entry == null) {
return null;
}
HRegionLocation loc = entry.getValue();
if (isEmptyStopRow(loc.getRegion().getEndKey()) ||
- Bytes.compareTo(loc.getRegion().getEndKey(), row) >= 0) {
+ (!isEmptyStopRow && Bytes.compareTo(loc.getRegion().getEndKey(), row) >= 0)) {
if (LOG.isTraceEnabled()) {
LOG.trace("Found " + loc + " in cache for '" + tableName + "', row='" +
Bytes.toStringBinary(row) + "', locateType=" + RegionLocateType.BEFORE);
http://git-wip-us.apache.org/repos/asf/hbase/blob/b5222f88/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocator.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocator.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocator.java
index 5f229c2..38dc78d 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocator.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocator.java
@@ -36,7 +36,6 @@ import java.util.stream.IntStream;
import org.apache.commons.io.IOUtils;
import org.apache.hadoop.hbase.HBaseClassTestRule;
import org.apache.hadoop.hbase.HBaseTestingUtility;
-import org.apache.hadoop.hbase.HRegionInfo;
import org.apache.hadoop.hbase.HRegionLocation;
import org.apache.hadoop.hbase.NotServingRegionException;
import org.apache.hadoop.hbase.ServerName;
@@ -76,7 +75,7 @@ public class TestAsyncNonMetaRegionLocator {
@BeforeClass
public static void setUp() throws Exception {
TEST_UTIL.startMiniCluster(3);
- TEST_UTIL.getAdmin().setBalancerRunning(false, true);
+ TEST_UTIL.getAdmin().balancerSwitch(false, true);
AsyncRegistry registry = AsyncRegistryFactory.getRegistry(TEST_UTIL.getConfiguration());
CONN = new AsyncConnectionImpl(TEST_UTIL.getConfiguration(), registry,
registry.getClusterId().get(), User.getCurrent());
@@ -136,7 +135,7 @@ public class TestAsyncNonMetaRegionLocator {
private void assertLocEquals(byte[] startKey, byte[] endKey, ServerName serverName,
HRegionLocation loc) {
- HRegionInfo info = loc.getRegionInfo();
+ RegionInfo info = loc.getRegion();
assertEquals(TABLE_NAME, info.getTable());
assertArrayEquals(startKey, info.getStartKey());
assertArrayEquals(endKey, info.getEndKey());
@@ -240,7 +239,7 @@ public class TestAsyncNonMetaRegionLocator {
.map(t -> t.getRegionServer().getServerName()).filter(sn -> !sn.equals(serverName))
.findAny().get();
- TEST_UTIL.getAdmin().move(Bytes.toBytes(loc.getRegionInfo().getEncodedName()),
+ TEST_UTIL.getAdmin().move(Bytes.toBytes(loc.getRegion().getEncodedName()),
Bytes.toBytes(newServerName.getServerName()));
while (!TEST_UTIL.getRSForFirstRegionInTable(TABLE_NAME).getServerName()
.equals(newServerName)) {
@@ -316,7 +315,7 @@ public class TestAsyncNonMetaRegionLocator {
.map(t -> t.getRegionServer().getServerName()).filter(sn -> !sn.equals(serverName))
.findAny().get();
Admin admin = TEST_UTIL.getAdmin();
- HRegionInfo region = admin.getTableRegions(TABLE_NAME).stream().findAny().get();
+ RegionInfo region = admin.getRegions(TABLE_NAME).stream().findAny().get();
admin.move(region.getEncodedNameAsBytes(), Bytes.toBytes(newServerName.getServerName()));
TEST_UTIL.waitFor(30000, new ExplainingPredicate<Exception>() {
@@ -346,4 +345,16 @@ public class TestAsyncNonMetaRegionLocator {
LOCATOR.getRegionLocation(TABLE_NAME, EMPTY_START_ROW, locateType, false).get());
}
}
+
+ // Testcase for HBASE-20822
+ @Test
+ public void testLocateBeforeLastRegion()
+ throws IOException, InterruptedException, ExecutionException {
+ createMultiRegionTable();
+ LOCATOR.getRegionLocation(TABLE_NAME, SPLIT_KEYS[0], RegionLocateType.CURRENT, false).join();
+ HRegionLocation loc =
+ LOCATOR.getRegionLocation(TABLE_NAME, EMPTY_END_ROW, RegionLocateType.BEFORE, false).get();
+ // should locate to the last region
+ assertArrayEquals(loc.getRegion().getEndKey(), EMPTY_END_ROW);
+ }
}