void handleExplicitSuspicionTrigger(Address caller, int callerMemberListVersion, MembersViewMetadata suspectedMembersViewMetadata) { clusterServiceLock.lock(); try { Address masterAddress = clusterService.getMasterAddress(); int memberListVersion = getMemberListVersion(); if (!(masterAddress.equals(caller) && memberListVersion == callerMemberListVersion)) { if (logger.isFineEnabled()) { logger.fine("Ignoring explicit suspicion trigger for " + suspectedMembersViewMetadata + ". Caller: " + caller + ", caller member list version: " + callerMemberListVersion + ", known master: " + masterAddress + ", local member list version: " + memberListVersion); } return; } clusterService.sendExplicitSuspicion(suspectedMembersViewMetadata); } finally { clusterServiceLock.unlock(); } }
logger.fine("Complainer " + receiverMVMetadata.getMemberAddress() + " will explicitly suspect from " + node.getThisAddress() + " and " + senderMVMetadata.getMemberAddress()); clusterService.sendExplicitSuspicion(receiverMVMetadata); clusterService.sendExplicitSuspicionTrigger(senderMVMetadata.getMemberAddress(), receiverMVMetadata); logger.fine("Complainee " + senderMVMetadata.getMemberAddress() + " will explicitly suspect from " + node.getThisAddress() + " and " + receiverMVMetadata.getMemberAddress()); clusterService.sendExplicitSuspicion(senderMVMetadata); clusterService.sendExplicitSuspicionTrigger(receiverMVMetadata.getMemberAddress(), senderMVMetadata); } else { + " and complainee " + senderMVMetadata.getMemberAddress() + " will explicitly suspect from " + node.getThisAddress()); clusterService.sendExplicitSuspicion(senderMVMetadata); clusterService.sendExplicitSuspicion(receiverMVMetadata);
void handleExplicitSuspicionTrigger(Address caller, int callerMemberListVersion, MembersViewMetadata suspectedMembersViewMetadata) { clusterServiceLock.lock(); try { Address masterAddress = clusterService.getMasterAddress(); int memberListVersion = getMemberListVersion(); if (!(masterAddress.equals(caller) && memberListVersion == callerMemberListVersion)) { if (logger.isFineEnabled()) { logger.fine("Ignoring explicit suspicion trigger for " + suspectedMembersViewMetadata + ". Caller: " + caller + ", caller member list version: " + callerMemberListVersion + ", known master: " + masterAddress + ", local member list version: " + memberListVersion); } return; } clusterService.sendExplicitSuspicion(suspectedMembersViewMetadata); } finally { clusterServiceLock.unlock(); } }
logger.fine("Complainer " + receiverMVMetadata.getMemberAddress() + " will explicitly suspect from " + node.getThisAddress() + " and " + senderMVMetadata.getMemberAddress()); clusterService.sendExplicitSuspicion(receiverMVMetadata); clusterService.sendExplicitSuspicionTrigger(senderMVMetadata.getMemberAddress(), receiverMVMetadata); logger.fine("Complainee " + senderMVMetadata.getMemberAddress() + " will explicitly suspect from " + node.getThisAddress() + " and " + receiverMVMetadata.getMemberAddress()); clusterService.sendExplicitSuspicion(senderMVMetadata); clusterService.sendExplicitSuspicionTrigger(receiverMVMetadata.getMemberAddress(), senderMVMetadata); } else { + " and complainee " + senderMVMetadata.getMemberAddress() + " will explicitly suspect from " + node.getThisAddress()); clusterService.sendExplicitSuspicion(senderMVMetadata); clusterService.sendExplicitSuspicion(receiverMVMetadata);
private boolean checkMembershipIntersectionSetEmpty(SplitBrainJoinMessage joinMessage) { Collection<Address> targetMemberAddresses = joinMessage.getMemberAddresses(); Address joinMessageAddress = joinMessage.getAddress(); if (targetMemberAddresses.contains(node.getThisAddress())) { // Join request is coming from master of the split and it thinks that I am its member. // This is partial split case and we want to convert it to a full split. // So it should remove me from its cluster. MembersViewMetadata membersViewMetadata = new MembersViewMetadata(joinMessageAddress, joinMessage.getUuid(), joinMessageAddress, joinMessage.getMemberListVersion()); clusterService.sendExplicitSuspicion(membersViewMetadata); logger.info(node.getThisAddress() + " CANNOT merge to " + joinMessageAddress + ", because it thinks this-node as its member."); return false; } for (Address address : clusterService.getMemberAddresses()) { if (targetMemberAddresses.contains(address)) { logger.info(node.getThisAddress() + " CANNOT merge to " + joinMessageAddress + ", because it thinks " + address + " is its member. " + "But " + address + " is member of this cluster."); return false; } } return true; }
private boolean checkMembershipIntersectionSetEmpty(SplitBrainJoinMessage joinMessage) { Collection<Address> targetMemberAddresses = joinMessage.getMemberAddresses(); Address joinMessageAddress = joinMessage.getAddress(); if (targetMemberAddresses.contains(node.getThisAddress())) { // Join request is coming from master of the split and it thinks that I am its member. // This is partial split case and we want to convert it to a full split. // So it should remove me from its cluster. MembersViewMetadata membersViewMetadata = new MembersViewMetadata(joinMessageAddress, joinMessage.getUuid(), joinMessageAddress, joinMessage.getMemberListVersion()); clusterService.sendExplicitSuspicion(membersViewMetadata); logger.info(node.getThisAddress() + " CANNOT merge to " + joinMessageAddress + ", because it thinks this-node as its member."); return false; } for (Address address : clusterService.getMemberAddresses()) { if (targetMemberAddresses.contains(address)) { logger.info(node.getThisAddress() + " CANNOT merge to " + joinMessageAddress + ", because it thinks " + address + " is its member. " + "But " + address + " is member of this cluster."); return false; } } return true; }
public boolean updateMembers(MembersView membersView, Address callerAddress, String callerUuid, String targetUuid) { lock.lock(); try { if (!isJoined()) { logger.warning("Not updating members received from caller: " + callerAddress + " because node is not joined! "); return false; } if (!checkValidMaster(callerAddress)) { logger.warning("Not updating members because caller: " + callerAddress + " is not known master: " + getMasterAddress()); MembersViewMetadata callerMembersViewMetadata = new MembersViewMetadata(callerAddress, callerUuid, callerAddress, membersView.getVersion()); if (!clusterJoinManager.isMastershipClaimInProgress()) { sendExplicitSuspicion(callerMembersViewMetadata); } return false; } checkMemberUpdateContainsLocalMember(membersView, targetUuid); if (!shouldProcessMemberUpdate(membersView)) { return false; } membershipManager.updateMembers(membersView); return true; } finally { lock.unlock(); } }
public boolean updateMembers(MembersView membersView, Address callerAddress, String callerUuid, String targetUuid) { lock.lock(); try { if (!isJoined()) { logger.warning("Not updating members received from caller: " + callerAddress + " because node is not joined! "); return false; } if (!checkValidMaster(callerAddress)) { logger.warning("Not updating members because caller: " + callerAddress + " is not known master: " + getMasterAddress()); MembersViewMetadata callerMembersViewMetadata = new MembersViewMetadata(callerAddress, callerUuid, callerAddress, membersView.getVersion()); if (!clusterJoinManager.isMastershipClaimInProgress()) { sendExplicitSuspicion(callerMembersViewMetadata); } return false; } checkMemberUpdateContainsLocalMember(membersView, targetUuid); if (!shouldProcessMemberUpdate(membersView)) { return false; } membershipManager.updateMembers(membersView); return true; } finally { lock.unlock(); } }
private void onInvalidHeartbeat(MembersViewMetadata senderMembersViewMetadata) { Address senderAddress = senderMembersViewMetadata.getMemberAddress(); if (clusterService.isMaster()) { if (!clusterService.getClusterJoinManager().isMastershipClaimInProgress()) { logger.fine("Sending explicit suspicion to " + senderAddress + " for heartbeat " + senderMembersViewMetadata + ", because it is not a member of this cluster" + " or its heartbeat cannot be validated!"); clusterService.sendExplicitSuspicion(senderMembersViewMetadata); } } else { Address masterAddress = clusterService.getMasterAddress(); if (clusterService.getMembershipManager().isMemberSuspected(masterAddress)) { logger.fine("Not sending heartbeat complaint for " + senderMembersViewMetadata + " to suspected master: " + masterAddress); return; } logger.fine("Sending heartbeat complaint to master " + masterAddress + " for heartbeat " + senderMembersViewMetadata + ", because it is not a member of this cluster" + " or its heartbeat cannot be validated!"); sendHeartbeatComplaintToMaster(senderMembersViewMetadata); } }
private void onInvalidHeartbeat(MembersViewMetadata senderMembersViewMetadata) { Address senderAddress = senderMembersViewMetadata.getMemberAddress(); if (clusterService.isMaster()) { if (!clusterService.getClusterJoinManager().isMastershipClaimInProgress()) { logger.fine("Sending explicit suspicion to " + senderAddress + " for heartbeat " + senderMembersViewMetadata + ", because it is not a member of this cluster" + " or its heartbeat cannot be validated!"); clusterService.sendExplicitSuspicion(senderMembersViewMetadata); } } else { Address masterAddress = clusterService.getMasterAddress(); if (clusterService.getMembershipManager().isMemberSuspected(masterAddress)) { logger.fine("Not sending heartbeat complaint for " + senderMembersViewMetadata + " to suspected master: " + masterAddress); return; } logger.fine("Sending heartbeat complaint to master " + masterAddress + " for heartbeat " + senderMembersViewMetadata + ", because it is not a member of this cluster" + " or its heartbeat cannot be validated!"); sendHeartbeatComplaintToMaster(senderMembersViewMetadata); } }
sendExplicitSuspicion(membersViewMetadata); return false;
sendExplicitSuspicion(membersViewMetadata); return false;