You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zg...@apache.org on 2019/10/15 03:16:50 UTC
[hbase] branch master updated: HBASE-23155 May NPE when concurrent
AsyncNonMetaRegionLocator#updateCachedLocationOnError (#718)
This is an automated email from the ASF dual-hosted git repository.
zghao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/master by this push:
new 7924ba3 HBASE-23155 May NPE when concurrent AsyncNonMetaRegionLocator#updateCachedLocationOnError (#718)
7924ba3 is described below
commit 7924ba39e7ce573369deda84f55e2a0e6ecb4872
Author: Guanghao Zhang <zg...@apache.org>
AuthorDate: Tue Oct 15 11:16:43 2019 +0800
HBASE-23155 May NPE when concurrent AsyncNonMetaRegionLocator#updateCachedLocationOnError (#718)
---
.../apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.java | 3 +++
.../hadoop/hbase/client/TestAsyncNonMetaRegionLocator.java | 10 ++++++++++
2 files changed, 13 insertions(+)
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 db552de..0cdfcdd 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
@@ -570,6 +570,9 @@ class AsyncNonMetaRegionLocator {
byte[] startKey = loc.getRegion().getStartKey();
for (;;) {
RegionLocations oldLocs = tableCache.cache.get(startKey);
+ if (oldLocs == null) {
+ return;
+ }
HRegionLocation oldLoc = oldLocs.getRegionLocation(loc.getRegion().getReplicaId());
if (!canUpdateOnError(loc, oldLoc)) {
return;
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 559e4a0..d1ed5b7 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
@@ -399,4 +399,14 @@ public class TestAsyncNonMetaRegionLocator {
assertArrayEquals(loc.getRegion().getStartKey(), EMPTY_START_ROW);
assertArrayEquals(loc.getRegion().getEndKey(), EMPTY_END_ROW);
}
+
+ @Test
+ public void testConcurrentUpdateCachedLocationOnError() throws Exception {
+ createSingleRegionTable();
+ HRegionLocation loc =
+ getDefaultRegionLocation(TABLE_NAME, EMPTY_START_ROW, RegionLocateType.CURRENT, false)
+ .get();
+ IntStream.range(0, 100).parallel()
+ .forEach(i -> LOCATOR.updateCachedLocationOnError(loc, new NotServingRegionException()));
+ }
}