Repository: hbase Updated Branches: refs/heads/branch-1 00f467b22 -> 88adccd55
HBASE-14431 AsyncRpcClient#removeConnection() never removes connection from connections pool if server fails (Samir Ahmic) Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/88adccd5 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/88adccd5 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/88adccd5 Branch: refs/heads/branch-1 Commit: 88adccd553e4f70a0e5362d5ab5158f45d57d201 Parents: 00f467b Author: tedyu <[email protected]> Authored: Sat Sep 19 07:33:26 2015 -0700 Committer: tedyu <[email protected]> Committed: Sat Sep 19 07:33:26 2015 -0700 ---------------------------------------------------------------------- .../org/apache/hadoop/hbase/ipc/AsyncRpcChannel.java | 15 +++++++++++++++ .../org/apache/hadoop/hbase/ipc/AsyncRpcClient.java | 4 ++-- 2 files changed, 17 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/88adccd5/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/AsyncRpcChannel.java ---------------------------------------------------------------------- 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 dbc39cf..43d75f9 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 @@ -712,6 +712,21 @@ public class AsyncRpcChannel { public int getConnectionHashCode() { return ConnectionId.hashCode(ticket, serviceName, address); } + + @Override + public int hashCode() { + return getConnectionHashCode(); + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof AsyncRpcChannel) { + AsyncRpcChannel channel = (AsyncRpcChannel) obj; + return channel.hashCode() == obj.hashCode(); + } + return false; + } + @Override public String toString() { http://git-wip-us.apache.org/repos/asf/hbase/blob/88adccd5/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/AsyncRpcClient.java ---------------------------------------------------------------------- diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/AsyncRpcClient.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/AsyncRpcClient.java index a84cc1a..876eb70 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/AsyncRpcClient.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/AsyncRpcClient.java @@ -398,12 +398,12 @@ public class AsyncRpcClient extends AbstractRpcClient { * Remove connection from pool */ public void removeConnection(AsyncRpcChannel connection) { - int connectionHashCode = connection.getConnectionHashCode(); + int connectionHashCode = connection.hashCode(); synchronized (connections) { // we use address as cache key, so we should check here to prevent removing the // wrong connection AsyncRpcChannel connectionInPool = this.connections.get(connectionHashCode); - if (connectionInPool == connection) { + if (connectionInPool.equals(connection)) { this.connections.remove(connectionHashCode); } else if (LOG.isDebugEnabled()) { LOG.debug(String.format("%s already removed, expected instance %08x, actual %08x",
