/** * Sends a split brain join request to the target address and checks the response to see if this node should merge * to the target address. */ protected final SplitBrainMergeCheckResult sendSplitBrainJoinMessageAndCheckResponse(Address target, SplitBrainJoinMessage request) { SplitBrainJoinMessage response = sendSplitBrainJoinMessage(target, request); return clusterService.getClusterJoinManager().shouldMerge(response); }
private void ensureLiteMemberPromotionIsAllowed() { if (!clusterService.isMaster()) { throw new IllegalStateException("This node is not master!"); } if (clusterService.getClusterJoinManager().isMastershipClaimInProgress()) { throw new IllegalStateException("Mastership claim is in progress!"); } ClusterState state = clusterService.getClusterState(); if (!state.isMigrationAllowed()) { throw new IllegalStateException("Lite member promotion is not allowed when cluster state is " + state); } }
/** * Sends a split brain join request to the target address and checks the response to see if this node should merge * to the target address. */ protected final SplitBrainMergeCheckResult sendSplitBrainJoinMessageAndCheckResponse(Address target, SplitBrainJoinMessage request) { SplitBrainJoinMessage response = sendSplitBrainJoinMessage(target, request); return clusterService.getClusterJoinManager().shouldMerge(response); }
private void ensureLiteMemberPromotionIsAllowed() { if (!clusterService.isMaster()) { throw new IllegalStateException("This node is not master!"); } if (clusterService.getClusterJoinManager().isMastershipClaimInProgress()) { throw new IllegalStateException("Mastership claim is in progress!"); } ClusterState state = clusterService.getClusterState(); if (!state.isMigrationAllowed()) { throw new IllegalStateException("Lite member promotion is not allowed when cluster state is " + state); } }
@Override public void run() { ClusterServiceImpl cm = getService(); cm.getClusterJoinManager().handleJoinRequest(request, getConnection()); }
@Override public void run() { ClusterServiceImpl clusterService = getService(); clusterService.getClusterJoinManager().handleMasterResponse(masterAddress, getCallerAddress()); }
@Override public void run() { ClusterServiceImpl cm = getService(); cm.getClusterJoinManager().answerWhoisMasterQuestion(joinMessage, getConnection()); }
public AbstractJoiner(Node node) { this.node = node; this.logger = node.loggingService.getLogger(getClass()); this.config = node.config; this.clusterService = node.getClusterService(); this.clusterJoinManager = clusterService.getClusterJoinManager(); this.mergeNextRunDelayMs = node.getProperties().getMillis(GroupProperty.MERGE_NEXT_RUN_DELAY_SECONDS); }
@Override public void run() { ClusterServiceImpl cm = getService(); cm.getClusterJoinManager().handleJoinRequest(request, getConnection()); }
@Override public void run() { ClusterServiceImpl cm = getService(); cm.getClusterJoinManager().answerWhoisMasterQuestion(joinMessage, getConnection()); }
@Override public void run() { ClusterServiceImpl clusterService = getService(); clusterService.getClusterJoinManager().handleMasterResponse(masterAddress, getCallerAddress()); }
public AbstractJoiner(Node node) { this.node = node; this.logger = node.loggingService.getLogger(getClass()); this.config = node.config; this.clusterService = node.getClusterService(); this.clusterJoinManager = clusterService.getClusterJoinManager(); this.mergeNextRunDelayMs = node.getProperties().getMillis(GroupProperty.MERGE_NEXT_RUN_DELAY_SECONDS); }
private boolean tryStartMastershipClaim() { ClusterJoinManager clusterJoinManager = clusterService.getClusterJoinManager(); if (clusterJoinManager.isMastershipClaimInProgress()) { return false; } MemberMap memberMap = memberMapRef.get(); if (!shouldClaimMastership(memberMap)) { return false; } logger.info("Starting mastership claim process..."); // Make sure that all pending join requests are cancelled temporarily. clusterJoinManager.setMastershipClaimInProgress(); clusterService.setMasterAddress(node.getThisAddress()); return true; }
private boolean tryStartMastershipClaim() { ClusterJoinManager clusterJoinManager = clusterService.getClusterJoinManager(); if (clusterJoinManager.isMastershipClaimInProgress()) { return false; } MemberMap memberMap = memberMapRef.get(); if (!shouldClaimMastership(memberMap)) { return false; } logger.info("Starting mastership claim process..."); // Make sure that all pending join requests are cancelled temporarily. clusterJoinManager.setMastershipClaimInProgress(); clusterService.setMasterAddress(node.getThisAddress()); return true; }
private boolean shouldRun() { ClusterServiceImpl clusterService = node.getClusterService(); if (!clusterService.isJoined()) { return false; } if (!clusterService.isMaster()) { return false; } if (!node.isRunning()) { return false; } final ClusterJoinManager clusterJoinManager = clusterService.getClusterJoinManager(); if (clusterJoinManager.isJoinInProgress()) { return false; } final ClusterState clusterState = clusterService.getClusterState(); return clusterState.isJoinAllowed(); }
private boolean shouldRun() { ClusterServiceImpl clusterService = node.getClusterService(); if (!clusterService.isJoined()) { return false; } if (!clusterService.isMaster()) { return false; } if (!node.isRunning()) { return false; } final ClusterJoinManager clusterJoinManager = clusterService.getClusterJoinManager(); if (clusterJoinManager.isJoinInProgress()) { return false; } final ClusterState clusterState = clusterService.getClusterState(); return clusterState.isJoinAllowed(); }
public void join() { if (clusterService.isJoined()) { if (logger.isFinestEnabled()) { logger.finest("Calling join on already joined node. ", new Exception("stacktrace")); } else { logger.warning("Calling join on already joined node. "); } return; } if (joiner == null) { logger.warning("No join method is enabled! Starting standalone."); ClusterJoinManager clusterJoinManager = clusterService.getClusterJoinManager(); clusterJoinManager.setThisMemberAsMaster(); return; } try { clusterService.resetJoinState(); joiner.join(); } catch (Throwable e) { logger.severe("Error while joining the cluster!", e); } if (!clusterService.isJoined()) { logger.severe("Could not join cluster. Shutting down now!"); shutdownNodeByFiringEvents(Node.this, true); } }
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); } }
/** Invoked on the master to send the member list (see {@link MembersUpdateOp}) to non-master nodes. */ private void sendMemberListToOthers() { if (!clusterService.isMaster() || !clusterService.isJoined() || clusterService.getClusterJoinManager().isMastershipClaimInProgress()) { if (logger.isFineEnabled()) { logger.fine("Cannot publish member list to cluster. Is-master: " + clusterService.isMaster() + ", joined: " + clusterService.isJoined() + " , mastership claim in progress: " + clusterService.getClusterJoinManager() .isMastershipClaimInProgress()); } return; } MemberMap memberMap = getMemberMap(); MembersView membersView = memberMap.toMembersView(); if (logger.isFineEnabled()) { logger.fine("Sending member list to the non-master nodes: " + memberListString()); } for (MemberImpl member : memberMap.getMembers()) { if (member.localMember()) { continue; } MembersUpdateOp op = new MembersUpdateOp(member.getUuid(), membersView, clusterService.getClusterTime(), null, false); op.setCallerUuid(clusterService.getThisUuid()); nodeEngine.getOperationService().send(op, member.getAddress()); } }