From 6ce2fd651d4e128ba39ea651c2b321a1c02f56da Mon Sep 17 00:00:00 2001 From: zhangduo Date: Mon, 2 Feb 2015 11:46:22 +0800 Subject: [PATCH] HBASE-12951 TestHCM.testConnectionClose is flakey when using AsyncRpcClient as client implementation --- .../main/java/org/apache/hadoop/hbase/ipc/AsyncRpcChannel.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/AsyncRpcChannel.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/AsyncRpcChannel.java index 0be4cd4..7069a42 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/AsyncRpcChannel.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/AsyncRpcChannel.java @@ -108,7 +108,7 @@ public class AsyncRpcChannel { private Token token; private String serverPrincipal; - boolean shouldCloseConnection = false; + volatile boolean shouldCloseConnection = false; private IOException closeException; private Timeout cleanupTimer; @@ -313,6 +313,13 @@ public class AsyncRpcChannel { calls.put(call.id, call); + // check again, see https://issues.apache.org/jira/browse/HBASE-12951 + if (shouldCloseConnection) { + Promise promise = channel.eventLoop().newPromise(); + promise.setFailure(new ConnectException()); + return promise; + } + // Add timeout for cleanup if none is present if (cleanupTimer == null) { cleanupTimer = AsyncRpcClient.WHEEL_TIMER.newTimeout(timeoutTask, call.getRpcTimeout(), -- 1.9.1