public String getThisUuid() { return clusterService.getThisUuid(); }
public String getThisUuid() { return clusterService.getThisUuid(); }
void onReceivedJoinRequest(JoinRequest joinRequest) { if (joinRequest.getUuid().compareTo(clusterService.getThisUuid()) < 0) { maxTryCount.incrementAndGet(); } }
void onReceivedJoinRequest(JoinRequest joinRequest) { if (joinRequest.getUuid().compareTo(clusterService.getThisUuid()) < 0) { maxTryCount.incrementAndGet(); } }
private void checkMemberUpdateContainsLocalMember(MembersView membersView, String targetUuid) { String thisUuid = getThisUuid(); if (!thisUuid.equals(targetUuid)) { String msg = "Not applying member update because target uuid: " + targetUuid + " is different! -> " + membersView + ", local member: " + localMember; throw new IllegalArgumentException(msg); } Member localMember = getLocalMember(); if (!membersView.containsMember(localMember.getAddress(), localMember.getUuid())) { String msg = "Not applying member update because member list doesn't contain us! -> " + membersView + ", local member: " + localMember; throw new IllegalArgumentException(msg); } }
private void checkMemberUpdateContainsLocalMember(MembersView membersView, String targetUuid) { String thisUuid = getThisUuid(); if (!thisUuid.equals(targetUuid)) { String msg = "Not applying member update because target uuid: " + targetUuid + " is different! -> " + membersView + ", local member: " + localMember; throw new IllegalArgumentException(msg); } Member localMember = getLocalMember(); if (!membersView.containsMember(localMember.getAddress(), localMember.getUuid())) { String msg = "Not applying member update because member list doesn't contain us! -> " + membersView + ", local member: " + localMember; throw new IllegalArgumentException(msg); } }
MembersViewMetadata createLocalMembersViewMetadata() { return new MembersViewMetadata(node.getThisAddress(), clusterService.getThisUuid(), clusterService.getMasterAddress(), getMemberListVersion()); }
MembersViewMetadata createLocalMembersViewMetadata() { return new MembersViewMetadata(node.getThisAddress(), clusterService.getThisUuid(), clusterService.getMasterAddress(), getMemberListVersion()); }
private Future<MembersView> invokeFetchMembersViewOp(Address target, String targetUuid) { Operation op = new FetchMembersViewOp(targetUuid).setCallerUuid(clusterService.getThisUuid()); return nodeEngine.getOperationService() .createInvocationBuilder(SERVICE_NAME, op, target) .setTryCount(mastershipClaimTimeoutSeconds) .setCallTimeout(TimeUnit.SECONDS.toMillis(mastershipClaimTimeoutSeconds)).invoke(); }
private Future<MembersView> invokeFetchMembersViewOp(Address target, String targetUuid) { Operation op = new FetchMembersViewOp(targetUuid).setCallerUuid(clusterService.getThisUuid()); return nodeEngine.getOperationService() .createInvocationBuilder(SERVICE_NAME, op, target) .setTryCount(mastershipClaimTimeoutSeconds) .setCallTimeout(TimeUnit.SECONDS.toMillis(mastershipClaimTimeoutSeconds)).invoke(); }
/** 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())); } } }
@Override public void promoteLocalLiteMember() { MemberImpl member = getLocalMember(); if (!member.isLiteMember()) { throw new IllegalStateException(member + " is not a lite member!"); } MemberImpl master = getMasterMember(); PromoteLiteMemberOp op = new PromoteLiteMemberOp(); op.setCallerUuid(member.getUuid()); InternalCompletableFuture<MembersView> future = nodeEngine.getOperationService().invokeOnTarget(SERVICE_NAME, op, master.getAddress()); MembersView view = future.join(); lock.lock(); try { if (!member.getAddress().equals(master.getAddress())) { updateMembers(view, master.getAddress(), master.getUuid(), getThisUuid()); } MemberImpl localMemberInMemberList = membershipManager.getMember(member.getAddress()); if (localMemberInMemberList.isLiteMember()) { throw new IllegalStateException("Cannot promote to data member! Previous master was: " + master.getAddress() + ", Current master is: " + getMasterAddress()); } } finally { lock.unlock(); } }
@Override public void promoteLocalLiteMember() { MemberImpl member = getLocalMember(); if (!member.isLiteMember()) { throw new IllegalStateException(member + " is not a lite member!"); } MemberImpl master = getMasterMember(); PromoteLiteMemberOp op = new PromoteLiteMemberOp(); op.setCallerUuid(member.getUuid()); InternalCompletableFuture<MembersView> future = nodeEngine.getOperationService().invokeOnTarget(SERVICE_NAME, op, master.getAddress()); MembersView view = future.join(); lock.lock(); try { if (!member.getAddress().equals(master.getAddress())) { updateMembers(view, master.getAddress(), master.getUuid(), getThisUuid()); } MemberImpl localMemberInMemberList = membershipManager.getMember(member.getAddress()); if (localMemberInMemberList.isLiteMember()) { throw new IllegalStateException("Cannot promote to data member! Previous master was: " + master.getAddress() + ", Current master is: " + getMasterAddress()); } } finally { lock.unlock(); } }
@SuppressWarnings("checkstyle:npathcomplexity") private boolean checkJoinRequest(JoinRequest joinRequest, Connection connection) { if (checkIfJoinRequestFromAnExistingMember(joinRequest, connection)) { return true; } final InternalHotRestartService hotRestartService = node.getNodeExtension().getInternalHotRestartService(); Address target = joinRequest.getAddress(); String targetUuid = joinRequest.getUuid(); if (hotRestartService.isMemberExcluded(target, targetUuid)) { logger.fine("cannot join " + target + " because it is excluded in cluster start."); hotRestartService.notifyExcludedMember(target); return true; } if (joinRequest.getExcludedMemberUuids().contains(clusterService.getThisUuid())) { logger.warning("cannot join " + target + " since this node is excluded in its list..."); hotRestartService.handleExcludedMemberUuids(target, joinRequest.getExcludedMemberUuids()); return true; } return checkClusterStateBeforeJoin(target, targetUuid); }
/** * Send a {@link WhoisMasterOp} to designated address. * * @param toAddress the address to which the operation will be sent. * @return {@code true} if the operation was sent, otherwise {@code false}. */ public boolean sendMasterQuestion(Address toAddress) { checkNotNull(toAddress, "No endpoint is specified!"); BuildInfo buildInfo = node.getBuildInfo(); final Address thisAddress = node.getThisAddress(); JoinMessage joinMessage = new JoinMessage(Packet.VERSION, buildInfo.getBuildNumber(), node.getVersion(), thisAddress, clusterService.getThisUuid(), node.isLiteMember(), node.createConfigCheck()); return nodeEngine.getOperationService().send(new WhoisMasterOp(joinMessage), toAddress); }
/** * Send a {@link WhoisMasterOp} to designated address. * * @param toAddress the address to which the operation will be sent. * @return {@code true} if the operation was sent, otherwise {@code false}. */ public boolean sendMasterQuestion(Address toAddress) { checkNotNull(toAddress, "No endpoint is specified!"); BuildInfo buildInfo = node.getBuildInfo(); final Address thisAddress = node.getThisAddress(); JoinMessage joinMessage = new JoinMessage(Packet.VERSION, buildInfo.getBuildNumber(), node.getVersion(), thisAddress, clusterService.getThisUuid(), node.isLiteMember(), node.createConfigCheck()); return nodeEngine.getOperationService().send(new WhoisMasterOp(joinMessage), toAddress); }
/** * Respond to a join request by sending the master address in a {@link MasterResponseOp}. This happens when current node * receives a join request but is not the cluster's master. * * @param target the node receiving the master answer */ private void sendMasterAnswer(Address target) { Address masterAddress = clusterService.getMasterAddress(); if (masterAddress == null) { logger.info(format("Cannot send master answer to %s since master node is not known yet", target)); return; } if (masterAddress.equals(node.getThisAddress()) && node.getNodeExtension().getInternalHotRestartService() .isMemberExcluded(masterAddress, clusterService.getThisUuid())) { // I already know that I will do a force-start so I will not allow target to join me logger.info("Cannot send master answer because " + target + " should not join to this master node."); return; } if (masterAddress.equals(target)) { logger.fine("Cannot send master answer to " + target + " since it is the known master"); return; } MasterResponseOp op = new MasterResponseOp(masterAddress); nodeEngine.getOperationService().send(op, target); }
/** * Respond to a join request by sending the master address in a {@link MasterResponseOp}. This happens when current node * receives a join request but is not the cluster's master. * * @param target the node receiving the master answer */ private void sendMasterAnswer(Address target) { Address masterAddress = clusterService.getMasterAddress(); if (masterAddress == null) { logger.info(format("Cannot send master answer to %s since master node is not known yet", target)); return; } if (masterAddress.equals(node.getThisAddress()) && node.getNodeExtension().getInternalHotRestartService() .isMemberExcluded(masterAddress, clusterService.getThisUuid())) { // I already know that I will do a force-start so I will not allow target to join me logger.info("Cannot send master answer because " + target + " should not join to this master node."); return; } if (masterAddress.equals(target)) { logger.fine("Cannot send master answer to " + target + " since it is the known master"); return; } MasterResponseOp op = new MasterResponseOp(masterAddress); nodeEngine.getOperationService().send(op, target); }
/** 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()); } }