private void checkMemberListChange(int initialMemberListVersion) { int currentMemberListVersion = node.getClusterService().getMembershipManager().getMemberListVersion(); if (initialMemberListVersion != currentMemberListVersion) { throw new IllegalStateException("Cluster members changed during state change! " + "Initial version: " + initialMemberListVersion + ", Current version: " + currentMemberListVersion); } }
private void checkMemberListChange(int initialMemberListVersion) { int currentMemberListVersion = node.getClusterService().getMembershipManager().getMemberListVersion(); if (initialMemberListVersion != currentMemberListVersion) { throw new IllegalStateException("Cluster members changed during state change! " + "Initial version: " + initialMemberListVersion + ", Current version: " + currentMemberListVersion); } }
private MembersView getMembersView() { ClusterServiceImpl clusterService = (ClusterServiceImpl) nodeEngine.getClusterService(); return clusterService.getMembershipManager().getMembersView(); }
@Override public void run() throws Exception { final ClusterServiceImpl clusterService = getService(); clusterService.getMembershipManager().sendMemberListToMember(getCallerAddress()); }
@Override public void run() throws Exception { final ClusterServiceImpl clusterService = getService(); clusterService.getMembershipManager().sendMemberListToMember(getCallerAddress()); }
public boolean rollbackClusterState(String txnId) { clusterServiceLock.lock(); try { final LockGuard currentLock = getStateLock(); if (!currentLock.allowsUnlock(txnId)) { return false; } logger.fine("Rolling back cluster state transaction: " + txnId); stateLockRef.set(LockGuard.NOT_LOCKED); // if state allows join after rollback, then remove all members which left during transaction. if (state.isJoinAllowed()) { node.getClusterService().getMembershipManager().removeAllMissingMembers(); } return true; } finally { clusterServiceLock.unlock(); } }
@Override public void run() throws Exception { ClusterServiceImpl service = getService(); Address callerAddress = getCallerAddress(); String callerUuid = getCallerUuid(); MembershipManager membershipManager = service.getMembershipManager(); response = membershipManager.promoteToDataMember(callerAddress, callerUuid); }
public boolean rollbackClusterState(String txnId) { clusterServiceLock.lock(); try { final LockGuard currentLock = getStateLock(); if (!currentLock.allowsUnlock(txnId)) { return false; } logger.fine("Rolling back cluster state transaction: " + txnId); stateLockRef.set(LockGuard.NOT_LOCKED); // if state allows join after rollback, then remove all members which left during transaction. if (state.isJoinAllowed()) { node.getClusterService().getMembershipManager().removeMembersDeadInNotJoinableState(); } return true; } finally { clusterServiceLock.unlock(); } }
@Override public void run() throws Exception { ClusterServiceImpl service = getService(); Address callerAddress = getCallerAddress(); String callerUuid = getCallerUuid(); MembershipManager membershipManager = service.getMembershipManager(); response = membershipManager.promoteToDataMember(callerAddress, callerUuid); }
/** Send a {@link HeartbeatOp} to the {@code target} * @param target target Member */ private void sendHeartbeat(Member target) { if (target == null) { return; } try { MembersViewMetadata membersViewMetadata = clusterService.getMembershipManager().createLocalMembersViewMetadata(); Operation op = new HeartbeatOp(membersViewMetadata, target.getUuid(), clusterClock.getClusterTime()); op.setCallerUuid(clusterService.getThisUuid()); node.nodeEngine.getOperationService().send(op, target.getAddress()); } catch (Exception e) { if (logger.isFineEnabled()) { logger.fine(format("Error while sending heartbeat -> %s[%s]", e.getClass().getName(), e.getMessage())); } } }
/** Send a {@link HeartbeatOp} to the {@code target} * @param target target Member */ private void sendHeartbeat(Member target) { if (target == null) { return; } try { MembersViewMetadata membersViewMetadata = clusterService.getMembershipManager().createLocalMembersViewMetadata(); Operation op = new HeartbeatOp(membersViewMetadata, target.getUuid(), clusterClock.getClusterTime()); op.setCallerUuid(clusterService.getThisUuid()); node.nodeEngine.getOperationService().send(op, target.getAddress()); } catch (Exception e) { if (logger.isFineEnabled()) { logger.fine(format("Error while sending heartbeat -> %s[%s]", e.getClass().getName(), e.getMessage())); } } }
public SplitBrainJoinMessage createSplitBrainJoinMessage() { MemberImpl localMember = getLocalMember(); boolean liteMember = localMember.isLiteMember(); Collection<Address> memberAddresses = clusterService.getMemberAddresses(); int dataMemberCount = clusterService.getSize(DATA_MEMBER_SELECTOR); Version clusterVersion = clusterService.getClusterVersion(); int memberListVersion = clusterService.getMembershipManager().getMemberListVersion(); return new SplitBrainJoinMessage(Packet.VERSION, buildInfo.getBuildNumber(), version, address, localMember.getUuid(), liteMember, createConfigCheck(), memberAddresses, dataMemberCount, clusterVersion, memberListVersion); }
public SplitBrainJoinMessage createSplitBrainJoinMessage() { MemberImpl localMember = getLocalMember(); boolean liteMember = localMember.isLiteMember(); Collection<Address> memberAddresses = clusterService.getMemberAddresses(); int dataMemberCount = clusterService.getSize(DATA_MEMBER_SELECTOR); Version clusterVersion = clusterService.getClusterVersion(); int memberListVersion = clusterService.getMembershipManager().getMemberListVersion(); return new SplitBrainJoinMessage(Packet.VERSION, buildInfo.getBuildNumber(), version, address, localMember.getUuid(), liteMember, createConfigCheck(), memberAddresses, dataMemberCount, clusterVersion, memberListVersion); }
private boolean masterCheck() { ILogger logger = getLogger(); ClusterServiceImpl service = getService(); if (service.isMaster()) { Member existingMember = service.getMembershipManager().getMember(request.getAddress(), request.getUuid()); if (existingMember != null) { logger.info("Removing " + suspectedCaller + ", since it thinks it's already split from this cluster " + "and looking to merge."); suspectedCaller = existingMember; } return true; } else { logger.info("Ignoring join check from " + getCallerAddress() + ", because this node is not master..."); return false; } }
private void sendHeartbeatComplaintToMaster(MembersViewMetadata senderMembersViewMetadata) { if (clusterService.isMaster()) { logger.warning("Cannot send heartbeat complaint for " + senderMembersViewMetadata + " to itself."); return; } Address masterAddress = clusterService.getMasterAddress(); if (masterAddress == null) { logger.fine("Cannot send heartbeat complaint for " + senderMembersViewMetadata.getMemberAddress() + ", master address is not set."); return; } MembersViewMetadata localMembersViewMetadata = clusterService.getMembershipManager().createLocalMembersViewMetadata(); Operation op = new HeartbeatComplaintOp(localMembersViewMetadata, senderMembersViewMetadata); OperationService operationService = nodeEngine.getOperationService(); operationService.send(op, masterAddress); }
private boolean masterCheck() { ILogger logger = getLogger(); ClusterServiceImpl service = getService(); if (service.isMaster()) { Member existingMember = service.getMembershipManager().getMember(request.getAddress(), request.getUuid()); if (existingMember != null) { logger.info("Removing " + suspectedCaller + ", since it thinks it's already split from this cluster " + "and looking to merge."); suspectedCaller = existingMember; } return true; } else { logger.info("Ignoring join check from " + getCallerAddress() + ", because this node is not master..."); return false; } }
private void sendHeartbeatComplaintToMaster(MembersViewMetadata senderMembersViewMetadata) { if (clusterService.isMaster()) { logger.warning("Cannot send heartbeat complaint for " + senderMembersViewMetadata + " to itself."); return; } Address masterAddress = clusterService.getMasterAddress(); if (masterAddress == null) { logger.fine("Cannot send heartbeat complaint for " + senderMembersViewMetadata.getMemberAddress() + ", master address is not set."); return; } MembersViewMetadata localMembersViewMetadata = clusterService.getMembershipManager().createLocalMembersViewMetadata(); Operation op = new HeartbeatComplaintOp(localMembersViewMetadata, senderMembersViewMetadata); OperationService operationService = nodeEngine.getOperationService(); operationService.send(op, masterAddress); }
public boolean setThisMemberAsMaster() { clusterServiceLock.lock(); try { if (clusterService.isJoined()) { logger.warning("Cannot set as master because node is already joined!"); return false; } logger.finest("This node is being set as the master"); Address thisAddress = node.getThisAddress(); MemberVersion version = node.getVersion(); clusterService.setMasterAddress(thisAddress); if (clusterService.getClusterVersion().isUnknown()) { clusterService.getClusterStateManager().setClusterVersion(version.asVersion()); } clusterService.getClusterClock().setClusterStartTime(Clock.currentTimeMillis()); clusterService.setClusterId(UuidUtil.createClusterUuid()); clusterService.getMembershipManager().setLocalMemberListJoinVersion(SINGLETON_MEMBER_LIST_VERSION); clusterService.setJoined(true); return true; } finally { clusterServiceLock.unlock(); } }
public boolean setThisMemberAsMaster() { clusterServiceLock.lock(); try { if (clusterService.isJoined()) { logger.warning("Cannot set as master because node is already joined!"); return false; } logger.finest("This node is being set as the master"); Address thisAddress = node.getThisAddress(); MemberVersion version = node.getVersion(); clusterService.setMasterAddress(thisAddress); if (clusterService.getClusterVersion().isUnknown()) { clusterService.getClusterStateManager().setClusterVersion(version.asVersion()); } clusterService.getClusterClock().setClusterStartTime(Clock.currentTimeMillis()); clusterService.setClusterId(UuidUtil.createClusterUuid()); clusterService.getMembershipManager().setLocalMemberListJoinVersion(SINGLETON_MEMBER_LIST_VERSION); clusterService.setJoined(true); return true; } finally { clusterServiceLock.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); } }