Source:
<code>private boolean checkClusterStateBeforeJoin(Address target, String uuid) { ClusterState state = clusterStateManager.getState(); if (state == ClusterState.IN_TRANSITION) { logger.warning("Cluster state is in transition process. Join is not allowed until " + "transaction is completed -> " + clusterStateManager.stateToString()); return true; } if (state.isJoinAllowed()) { return checkRecentlyJoinedMemberUuidBeforeJoin(target, uuid); } <START> if (clusterService.getClusterVersion().isLessThan(Versions.V3_12) && clusterService.isMissingMember(target, uuid)) { <END> MemberImpl missingMember = clusterService.getMembershipManager().getMissingMember(target, uuid); if (missingMember != null && !target.equals(missingMember.getAddress())) { logger.warning("UUID " + uuid + " was being used by " + missingMember + " before. " + target + " is not allowed to join with a UUID which belongs to" + " a known passive member."); return true; } return false; } if (clusterService.isMissingMember(target, uuid)) { return false; } if (node.getNodeExtension().isStartCompleted()) { String message = "Cluster state either is locked or doesn't allow new members to join -> " + clusterStateManager.stateToString(); logger.warning(message); OperationService operationService = nodeEngine.getOperationService(); BeforeJoinCheckFailureOp op = new BeforeJoinCheckFailureOp(message); operationService.send(op, target); } else { String message = "Cluster state either is locked or doesn't allow new members to join -> " + clusterStateManager.stateToString() + ". Silently ignored join request of " + target + " because start not completed."; logger.warning(message); } return true; }</code><technical_language>good, thanks</technical_language>

Target:
private boolean checkClusterStateBeforeJoin(Address target, String uuid) { ClusterState state = clusterStateManager.getState(); if (state == ClusterState.IN_TRANSITION) { logger.warning("Cluster state is in transition process. Join is not allowed until " + "transaction is completed -> " + clusterStateManager.stateToString()); return true; } if (state.isJoinAllowed()) { return checkRecentlyJoinedMemberUuidBeforeJoin(target, uuid); } if (clusterService.getClusterVersion().isLessThan(Versions.V3_12) && node.getNodeExtension().getInternalHotRestartService().isEnabled() && clusterService.isMissingMember(target, uuid)) { Collection<MemberImpl> missingMembers = clusterService.getMembershipManager().getMissingMembers(); for (MemberImpl member : missingMembers) { if (!uuid.equals(member.getUuid()) && target.equals(member.getAddress())) { MemberImpl joiningMember = new MemberImpl(target, MemberVersion.UNKNOWN, false, uuid); logger.warning("Address " + target + " was being used by " + member + " before. " + joiningMember + " is not allowed to join with an address which belongs to" + " a known missing member."); return true; } } return false; } if (clusterService.isMissingMember(target, uuid)) { return false; } if (node.getNodeExtension().isStartCompleted()) { String message = "Cluster state either is locked or doesn't allow new members to join -> " + clusterStateManager.stateToString(); logger.warning(message); OperationService operationService = nodeEngine.getOperationService(); BeforeJoinCheckFailureOp op = new BeforeJoinCheckFailureOp(message); operationService.send(op, target); } else { String message = "Cluster state either is locked or doesn't allow new members to join -> " + clusterStateManager.stateToString() + ". Silently ignored join request of " + target + " because start not completed."; logger.warning(message); } return true; }