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 dbc39cf06a5..43d75f94f56 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() { 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 a84cc1a7835..876eb70b84e 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",