public boolean isMaster() { return clusterService.isMaster(); }
public boolean isMaster() { return clusterService.isMaster(); }
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); } }
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); } }
private boolean shouldClaimMastership(MemberMap memberMap) { if (clusterService.isMaster()) { return false; } for (MemberImpl m : memberMap.headMemberSet(clusterService.getLocalMember(), false)) { if (!isMemberSuspected(m.getAddress())) { return false; } } return true; }
private boolean shouldClaimMastership(MemberMap memberMap) { if (clusterService.isMaster()) { return false; } for (MemberImpl m : memberMap.headMemberSet(clusterService.getLocalMember(), false)) { if (!isMemberSuspected(m.getAddress())) { return false; } } return true; }
/** * Invoked from master node while executing a join request to validate it, delegating to * {@link com.hazelcast.instance.NodeExtension#validateJoinRequest(JoinMessage)} */ private boolean validateJoinRequest(JoinRequest joinRequest, Address target) { if (clusterService.isMaster()) { try { node.getNodeExtension().validateJoinRequest(joinRequest); } catch (Exception e) { logger.warning(e.getMessage()); nodeEngine.getOperationService().send(new BeforeJoinCheckFailureOp(e.getMessage()), target); return false; } } return true; }
/** * Invoked from master node while executing a join request to validate it, delegating to * {@link com.hazelcast.instance.NodeExtension#validateJoinRequest(JoinMessage)} */ private boolean validateJoinRequest(JoinRequest joinRequest, Address target) { if (clusterService.isMaster()) { try { node.getNodeExtension().validateJoinRequest(joinRequest); } catch (Exception e) { logger.warning(e.getMessage()); nodeEngine.getOperationService().send(new BeforeJoinCheckFailureOp(e.getMessage()), target); return false; } } return true; }
private void postJoin() { blacklistedAddresses.clear(); if (logger.isFineEnabled()) { logger.fine("PostJoin master: " + clusterService.getMasterAddress() + ", isMaster: " + clusterService.isMaster()); } if (!node.isRunning()) { return; } if (tryCount.incrementAndGet() == JOIN_TRY_COUNT) { logger.warning("Join try count exceed limit, setting this node as master!"); clusterJoinManager.setThisMemberAsMaster(); } if (clusterService.isJoined()) { if (!clusterService.isMaster()) { ensureConnectionToAllMembers(); } if (clusterService.getSize() == 1) { clusterService.printMemberList(); } } }
/** * Send heartbeats and calculate clock drift. This method is expected to be called periodically because it calculates * the clock drift based on the expected and actual invocation period. */ void heartbeat() { if (!clusterService.isJoined()) { return; } checkClockDrift(heartbeatIntervalMillis); final long clusterTime = clusterClock.getClusterTime(); if (clusterService.isMaster()) { heartbeatWhenMaster(clusterTime); } else { heartbeatWhenSlave(clusterTime); } }
/** * Send heartbeats and calculate clock drift. This method is expected to be called periodically because it calculates * the clock drift based on the expected and actual invocation period. */ void heartbeat() { if (!clusterService.isJoined()) { return; } checkClockDrift(heartbeatIntervalMillis); final long clusterTime = clusterClock.getClusterTime(); if (clusterService.isMaster()) { heartbeatWhenMaster(clusterTime); } else { heartbeatWhenSlave(clusterTime); } }
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(); }
@Override public void run() { final NodeEngineImpl nodeEngine = (NodeEngineImpl) getNodeEngine(); Node node = nodeEngine.getNode(); Joiner joiner = node.getJoiner(); ClusterServiceImpl clusterService = node.getClusterService(); final ILogger logger = node.getLogger(getClass().getName()); if (joiner instanceof TcpIpJoiner) { TcpIpJoiner tcpIpJoiner = (TcpIpJoiner) joiner; final Address endpoint = getCallerAddress(); final Address masterAddress = clusterService.getMasterAddress(); approvedAsMaster = !tcpIpJoiner.isClaimingMastership() && !clusterService.isMaster() && (masterAddress == null || masterAddress.equals(endpoint)); } else { approvedAsMaster = false; logger.warning("This node requires MulticastJoin strategy!"); } if (logger.isFineEnabled()) { logger.fine("Sending '" + approvedAsMaster + "' for master claim of node: " + getCallerAddress()); } }
private boolean checkIfUsingAnExistingMemberUuid(JoinMessage joinMessage) { Member member = clusterService.getMember(joinMessage.getUuid()); Address target = joinMessage.getAddress(); if (member != null && !member.getAddress().equals(joinMessage.getAddress())) { if (clusterService.isMaster() && !isMastershipClaimInProgress()) { String message = "There's already an existing member " + member + " with the same UUID. " + target + " is not allowed to join."; logger.warning(message); } else { sendMasterAnswer(target); } return true; } return false; }
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); }
private boolean checkIfUsingAnExistingMemberUuid(JoinMessage joinMessage) { Member member = clusterService.getMember(joinMessage.getUuid()); Address target = joinMessage.getAddress(); if (member != null && !member.getAddress().equals(joinMessage.getAddress())) { if (clusterService.isMaster() && !isMastershipClaimInProgress()) { String message = "There's already an existing member " + member + " with the same UUID. " + target + " is not allowed to join."; logger.warning(message); OperationService operationService = nodeEngine.getOperationService(); operationService.send(new BeforeJoinCheckFailureOp(message), target); } else { sendMasterAnswer(target); } return true; } return false; }