private Set<Member> collectMembersToAsk(MemberMap localMemberMap) { Set<Member> membersToAsk = new HashSet<Member>(); for (MemberImpl member : localMemberMap.getMembers()) { if (member.localMember() || suspectedMembers.contains(member.getAddress())) { continue; } membersToAsk.add(member); } return membersToAsk; }
private Set<Member> collectMembersToAsk(MemberMap localMemberMap) { Set<Member> membersToAsk = new HashSet<Member>(); for (MemberImpl member : localMemberMap.getMembers()) { if (member.localMember() || suspectedMembers.contains(member.getAddress())) { continue; } membersToAsk.add(member); } return membersToAsk; }
/** Sends a {@link PartitionStateOperation} to cluster members and returns the futures. */ private List<Future<Boolean>> firePartitionStateOperation(Collection<MemberImpl> members, PartitionRuntimeState partitionState, OperationService operationService) { final ClusterServiceImpl clusterService = node.clusterService; List<Future<Boolean>> calls = new ArrayList<Future<Boolean>>(members.size()); for (MemberImpl member : members) { if (!(member.localMember() || clusterService.isMemberRemovedInNotJoinableState(member.getAddress()))) { try { Address address = member.getAddress(); PartitionStateOperation operation = new PartitionStateOperation(partitionState, true); Future<Boolean> f = operationService.invokeOnTarget(SERVICE_NAME, operation, address); calls.add(f); } catch (Exception e) { logger.finest(e); } } } return calls; }
@Override public void memberAdded(MemberImpl member) { logger.fine("Adding " + member); lock.lock(); try { lastMaster = node.getClusterService().getMasterAddress(); if (!member.localMember()) { partitionStateManager.updateMemberGroupsSize(); } if (node.isMaster()) { if (partitionStateManager.isInitialized()) { migrationManager.triggerControlTask(); } } } finally { lock.unlock(); } }
/** * Sends heartbeat to each of the cluster members. * Checks whether a member has failed to send a heartbeat in time * (see {@link #maxNoHeartbeatMillis}) * and removes that member from the cluster. * <p></p> * This method is only called on the master member. * * @param now the current cluster clock time */ private void heartbeatWhenMaster(long now) { Collection<MemberImpl> members = clusterService.getMemberImpls(); for (MemberImpl member : members) { if (!member.localMember()) { try { logIfConnectionToEndpointIsMissing(now, member); if (suspectMemberIfNotHeartBeating(now, member)) { continue; } pingMemberIfRequired(now, member); sendHeartbeat(member); } catch (Throwable e) { logger.severe(e); } } } }
@Override public void memberRemoved(MembershipServiceEvent event) { if (event.getMember().localMember()) { return; } final String deadMemberUuid = event.getMember().getUuid(); try { nodeEngine.getExecutionService().schedule(new DestroyEndpointTask(deadMemberUuid), endpointRemoveDelaySeconds, TimeUnit.SECONDS); } catch (RejectedExecutionException e) { if (logger.isFinestEnabled()) { logger.finest(e); } } }
/** * Sends heartbeat to each of the cluster members. * Checks whether a member has failed to send a heartbeat in time * (see {@link #maxNoHeartbeatMillis}) * and removes that member from the cluster. * <p></p> * This method is only called on the master member. * * @param now the current cluster clock time */ private void heartbeatWhenMaster(long now) { Collection<MemberImpl> members = clusterService.getMemberImpls(); for (MemberImpl member : members) { if (!member.localMember()) { try { logIfConnectionToEndpointIsMissing(now, member); if (suspectMemberIfNotHeartBeating(now, member)) { continue; } pingMemberIfRequired(now, member); sendHeartbeat(member); } catch (Throwable e) { logger.severe(e); } } } }
@Override public void memberRemoved(MembershipServiceEvent event) { if (event.getMember().localMember()) { return; } final String deadMemberUuid = event.getMember().getUuid(); try { nodeEngine.getExecutionService().schedule(new DestroyEndpointTask(deadMemberUuid), endpointRemoveDelaySeconds, TimeUnit.SECONDS); } catch (RejectedExecutionException e) { if (logger.isFinestEnabled()) { logger.finest(e); } } }
for (int i = 0; i < members.length; i++) { if (member.equals(members[i])) { if (member.localMember()) { member = clusterService.promoteAndGetLocalMember(); } else { member = new MemberImpl(member.getAddress(), member.getVersion(), member.localMember(), member.getUuid(), member.getAttributes(), false, members[i].getMemberListJoinVersion(), node.hazelcastInstance);
for (int i = 0; i < members.length; i++) { if (member.equals(members[i])) { if (member.localMember()) { member = clusterService.promoteAndGetLocalMember(); } else { member = new MemberImpl(member.getAddress(), member.getVersion(), member.localMember(), member.getUuid(), member.getAttributes(), false, members[i].getMemberListJoinVersion(), node.hazelcastInstance);
void suspectMember(MemberImpl suspectedMember, String reason, boolean shouldCloseConn) { assert !suspectedMember.equals(clusterService.getLocalMember()) : "Cannot suspect from myself!"; assert !suspectedMember.localMember() : "Cannot be local member";
void suspectMember(MemberImpl suspectedMember, String reason, boolean shouldCloseConn) { assert !suspectedMember.equals(clusterService.getLocalMember()) : "Cannot suspect from myself!"; assert !suspectedMember.localMember() : "Cannot be local member";
private MemberImpl createNewMemberImplIfChanged(MemberInfo newMemberInfo, MemberImpl member) { if (member.isLiteMember() && !newMemberInfo.isLiteMember()) { // lite member promoted logger.info(member + " is promoted to normal member."); if (member.localMember()) { member = clusterService.promoteAndGetLocalMember(); } else { member = createMember(newMemberInfo, member.getAttributes()); } } else if (member.getMemberListJoinVersion() != newMemberInfo.getMemberListJoinVersion()) { if (member.getMemberListJoinVersion() != NA_MEMBER_LIST_JOIN_VERSION) { if (logger.isFineEnabled()) { logger.fine("Member list join version of " + member + " is changed to " + newMemberInfo.getMemberListJoinVersion() + " from " + member.getMemberListJoinVersion()); } } if (member.localMember()) { setLocalMemberListJoinVersion(newMemberInfo.getMemberListJoinVersion()); member = clusterService.getLocalMember(); } else { member = createMember(newMemberInfo, member.getAttributes()); } } return member; }
private MemberImpl createNewMemberImplIfChanged(MemberInfo newMemberInfo, MemberImpl member) { if (member.isLiteMember() && !newMemberInfo.isLiteMember()) { // lite member promoted logger.info(member + " is promoted to normal member."); if (member.localMember()) { member = clusterService.promoteAndGetLocalMember(); } else { member = createMember(newMemberInfo, member.getAttributes()); } } else if (member.getMemberListJoinVersion() != newMemberInfo.getMemberListJoinVersion()) { if (member.getMemberListJoinVersion() != NA_MEMBER_LIST_JOIN_VERSION) { if (logger.isFineEnabled()) { logger.fine("Member list join version of " + member + " is changed to " + newMemberInfo.getMemberListJoinVersion() + " from " + member.getMemberListJoinVersion()); } } if (member.localMember()) { setLocalMemberListJoinVersion(newMemberInfo.getMemberListJoinVersion()); member = clusterService.getLocalMember(); } else { member = createMember(newMemberInfo, member.getAttributes()); } } return member; }
if (member.localMember() || joiningMembers.containsKey(member.getAddress())) { continue;
Collection<MemberImpl> members = node.clusterService.getMemberImpls(); for (MemberImpl member : members) { if (!member.localMember()) { try { operationService.send(op, member.getAddress());
@Override public void run() throws Exception { NodeSequencerService sequencerService = getService(); String sequencerName = getSequencerName(); SequencerDefinition definition = sequencerService.destroySequencer(sequencerName, true); // Definition might be already destroyed concurrently if (definition == null) { return; } backupCount = definition.getBackupCount(); NodeEngine nodeEngine = getNodeEngine(); OperationService operationService = nodeEngine.getOperationService(); DestroySequencerOperation operation = new DestroySequencerOperation(sequencerName); for (MemberImpl member : nodeEngine.getClusterService().getMemberImpls()) { if (!member.localMember() && !member.getAddress().equals(getCallerAddress())) { operationService.invokeOnTarget(SERVICE_NAME, operation, member.getAddress()); } } ClientDestroySequencerNotification notification = new ClientDestroySequencerNotification(sequencerName); Collection<EventRegistration> registrations = sequencerService.findClientChannelRegistrations(sequencerName, null); nodeEngine.getEventService().publishEvent(SERVICE_NAME, registrations, notification, 1); }
@Override public void run() throws Exception { String sequencerName = getSequencerName(); NodeSequencerService sequencerService = getService(); SequencerDefinition definition = sequencerService.destroySequencer(sequencerName, true); // Definition might be already destroyed concurrently if (definition == null) { return; } backupCount = definition.getBackupCount(); NodeEngine nodeEngine = getNodeEngine(); OperationService operationService = nodeEngine.getOperationService(); DestroySequencerOperation operation = new DestroySequencerOperation(sequencerName); for (MemberImpl member : nodeEngine.getClusterService().getMemberImpls()) { if (!member.localMember()) { operationService.invokeOnTarget(SERVICE_NAME, operation, member.getAddress()); } } String clientUuid = getMessageChannel().getUuid(); ClientDestroySequencerNotification notification = new ClientDestroySequencerNotification(sequencerName); Collection<EventRegistration> registrations = sequencerService.findClientChannelRegistrations(sequencerName, clientUuid); EventService eventService = nodeEngine.getEventService(); eventService.publishEvent(SERVICE_NAME, registrations, notification, 1); eventService.deregisterAllListeners(SERVICE_NAME, sequencerName); }
/** 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()); } }
/** 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()); } }