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 2017/12/28 06:43:17 UTC
hbase git commit: HBASE-19643 Need to update cache location when get
error in AsyncBatchRpcRetryingCaller
Repository: hbase
Updated Branches:
refs/heads/master 53233be5a -> 8580ba7b6
HBASE-19643 Need to update cache location when get error in AsyncBatchRpcRetryingCaller
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/8580ba7b
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/8580ba7b
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/8580ba7b
Branch: refs/heads/master
Commit: 8580ba7b6f55183f8a5de2580403fb0ef9a01117
Parents: 53233be
Author: Guanghao Zhang <zg...@apache.org>
Authored: Wed Dec 27 17:39:52 2017 +0800
Committer: Guanghao Zhang <zg...@apache.org>
Committed: Thu Dec 28 14:33:24 2017 +0800
----------------------------------------------------------------------
.../client/AsyncBatchRpcRetryingCaller.java | 3 +++
.../hbase/client/TestAsyncTableBatch.java | 26 ++++++++++++++++++++
2 files changed, 29 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/8580ba7b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncBatchRpcRetryingCaller.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncBatchRpcRetryingCaller.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncBatchRpcRetryingCaller.java
index 7249435..8d59130 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncBatchRpcRetryingCaller.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncBatchRpcRetryingCaller.java
@@ -262,6 +262,7 @@ class AsyncBatchRpcRetryingCaller<T> {
} else if (result instanceof Throwable) {
Throwable error = translateException((Throwable) result);
logException(tries, () -> Stream.of(regionReq), error, serverName);
+ conn.getLocator().updateCachedLocation(regionReq.loc, error);
if (error instanceof DoNotRetryIOException || tries >= maxAttempts) {
failOne(action, tries, error, EnvironmentEdgeManager.currentTime(),
getExtraContextForError(serverName));
@@ -364,6 +365,8 @@ class AsyncBatchRpcRetryingCaller<T> {
ServerName serverName) {
Throwable error = translateException(t);
logException(tries, () -> actionsByRegion.values().stream(), error, serverName);
+ actionsByRegion
+ .forEach((rn, regionReq) -> conn.getLocator().updateCachedLocation(regionReq.loc, error));
if (error instanceof DoNotRetryIOException || tries >= maxAttempts) {
failAll(actionsByRegion.values().stream().flatMap(r -> r.actions.stream()), tries, error,
serverName);
http://git-wip-us.apache.org/repos/asf/hbase/blob/8580ba7b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableBatch.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableBatch.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableBatch.java
index 489ad1d..f47e6e9 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableBatch.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableBatch.java
@@ -20,6 +20,7 @@ package org.apache.hadoop.hbase.client;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
@@ -179,6 +180,31 @@ public class TestAsyncTableBatch {
}
@Test
+ public void testWithRegionServerFailover() throws Exception {
+ AsyncTable<?> table = tableGetter.apply(TABLE_NAME);
+ table.putAll(IntStream.range(0, COUNT)
+ .mapToObj(i -> new Put(getRow(i)).addColumn(FAMILY, CQ, Bytes.toBytes(i)))
+ .collect(Collectors.toList())).get();
+ TEST_UTIL.getMiniHBaseCluster().getRegionServer(0).abort("Aborting for tests");
+ Thread.sleep(100);
+ table.putAll(IntStream.range(COUNT, 2 * COUNT)
+ .mapToObj(i -> new Put(getRow(i)).addColumn(FAMILY, CQ, Bytes.toBytes(i)))
+ .collect(Collectors.toList())).get();
+ List<Result> results = table.getAll(
+ IntStream.range(0, 2 * COUNT).mapToObj(i -> new Get(getRow(i))).collect(Collectors.toList()))
+ .get();
+ assertEquals(2 * COUNT, results.size());
+ results.forEach(r -> assertFalse(r.isEmpty()));
+ table.deleteAll(IntStream.range(0, 2 * COUNT).mapToObj(i -> new Delete(getRow(i)))
+ .collect(Collectors.toList())).get();
+ results = table.getAll(
+ IntStream.range(0, 2 * COUNT).mapToObj(i -> new Get(getRow(i))).collect(Collectors.toList()))
+ .get();
+ assertEquals(2 * COUNT, results.size());
+ results.forEach(r -> assertTrue(r.isEmpty()));
+ }
+
+ @Test
public void testMixed() throws InterruptedException, ExecutionException, IOException {
AsyncTable<?> table = tableGetter.apply(TABLE_NAME);
table.putAll(IntStream.range(0, 7)