diff --git a/hazelcast/src/main/java/com/hazelcast/client/impl/ClientEngineImpl.java b/hazelcast/src/main/java/com/hazelcast/client/impl/ClientEngineImpl.java index 9cb5d61ffca2..61cc5a57e1ef 100644 --- a/hazelcast/src/main/java/com/hazelcast/client/impl/ClientEngineImpl.java +++ b/hazelcast/src/main/java/com/hazelcast/client/impl/ClientEngineImpl.java @@ -460,13 +460,15 @@ public void connectionRemoved(Connection connection) { } String localMemberUuid = node.getThisUuid(); - String ownerUuid = ownershipMappings.get(endpoint.getUuid()); + final String clientUuid = endpoint.getUuid(); + String ownerUuid = ownershipMappings.get(clientUuid); if (localMemberUuid.equals(ownerUuid)) { + final long authenticationCorrelationId = endpoint.getAuthenticationCorrelationId(); try { nodeEngine.getExecutionService().schedule(new Runnable() { @Override public void run() { - callDisconnectionOperation(endpoint); + callDisconnectionOperation(clientUuid, authenticationCorrelationId); } }, endpointRemoveDelaySeconds, TimeUnit.SECONDS); } catch (RejectedExecutionException e) { @@ -477,11 +479,10 @@ public void run() { } } - private void callDisconnectionOperation(ClientEndpointImpl endpoint) { + private void callDisconnectionOperation(String clientUuid, long authenticationCorrelationId) { Collection memberList = nodeEngine.getClusterService().getMembers(); OperationService operationService = nodeEngine.getOperationService(); String memberUuid = getLocalMember().getUuid(); - String clientUuid = endpoint.getUuid(); String ownerMember = ownershipMappings.get(clientUuid); if (!memberUuid.equals(ownerMember)) { @@ -489,7 +490,7 @@ private void callDisconnectionOperation(ClientEndpointImpl endpoint) { return; } - if (lastAuthenticationCorrelationIds.get(clientUuid).get() > endpoint.getAuthenticationCorrelationId()) { + if (lastAuthenticationCorrelationIds.get(clientUuid).get() > authenticationCorrelationId) { //a new authentication already made for that client. This check is needed to detect // "a disconnected client is reconnected back to same node" return;