public boolean isCoordinator() { return getGMSContext().getGroupCommunicationProvider().isGroupLeader(); }
public boolean isCoordinator() { return getGMSContext().getGroupCommunicationProvider().isGroupLeader(); }
private List<String> getRecoveriesInProgressByFailedMember(final String token) { final List<String> tokens = new ArrayList<String>(); final DistributedStateCache dsc = getGMSContext().getDistributedStateCache(); final Map<GMSCacheable, Object> entries = dsc.getFromCache(token); for (Map.Entry<GMSCacheable,Object> entry : entries.entrySet()) { GMSCacheable gmsCacheable = entry.getKey(); //if this member is recovering someone else if (token.equals(gmsCacheable.getMemberTokenId()) && !token.equals(gmsCacheable.getKey())) { if (entry.getValue() instanceof String) { if (((String) entry.getValue()).startsWith(REC_PROGRESS_STATE)) { if (logger.isLoggable(Level.FINER)){ logger.log(Level.FINER, new StringBuffer("Failed Member ").append(token) .append(" had recovery-in-progress for ") .append(gmsCacheable.getKey()).append(" when ") .append(token).append(" failed. ").toString()); } tokens.add((String) gmsCacheable.getKey()); RecoveryTargetSelector.setRecoverySelectionState( getGMSContext().getServerIdentityToken(), (String) gmsCacheable.getKey(), getGMSContext().getGroupName()); } } } } return tokens; }
private List<String> getRecoveriesInProgressByFailedMember(final String token) { final List<String> tokens = new ArrayList<String>(); final DistributedStateCache dsc = getGMSContext().getDistributedStateCache(); final Map<GMSCacheable, Object> entries = dsc.getFromCache(token); for (Map.Entry<GMSCacheable,Object> entry : entries.entrySet()) { GMSCacheable gmsCacheable = entry.getKey(); //if this member is recovering someone else if (token.equals(gmsCacheable.getMemberTokenId()) && !token.equals(gmsCacheable.getKey())) { if (entry.getValue() instanceof String) { if (((String) entry.getValue()).startsWith(REC_PROGRESS_STATE)) { if (logger.isLoggable(Level.FINER)){ logger.log(Level.FINER, new StringBuffer("Failed Member ").append(token) .append(" had recovery-in-progress for ") .append(gmsCacheable.getKey()).append(" when ") .append(token).append(" failed. ").toString()); } tokens.add((String) gmsCacheable.getKey()); RecoveryTargetSelector.setRecoverySelectionState( getGMSContext().getServerIdentityToken(), (String) gmsCacheable.getKey(), getGMSContext().getGroupName()); } } } } return tokens; }
logger.log(Level.FINE, "I am coordinator, performing sync ops on " + token); try { dsc = (DistributedStateCacheImpl) getGMSContext().getDistributedStateCache(); if (logger.isLoggable(Level.FINER)) { logger.log(Level.FINER, "got DSC ref " + dsc.toString());
dsc = (DistributedStateCacheImpl) getGMSContext().getDistributedStateCache(); if (logger.isLoggable(Level.FINER)) { logger.log(Level.FINER, "got DSC ref " + dsc.toString());
public void run() { boolean alreadyLogged = false; while (!getGMSContext().isShuttingDown()) { EventPacket packet = null; try {
public void run() { boolean alreadyLogged = false; while (!getGMSContext().isShuttingDown()) { EventPacket packet = null; try {
private void addInDoubtMemberSignals(final EventPacket packet) { final SystemAdvertisement advert = packet.getSystemAdvertisement(); final GMSMember member = Utility.getGMSMember(advert); final String token = member.getMemberToken(); getGMSContext().addToSuspectList(token); logger.log(Level.INFO, "gms.failureSuspectedEventReceived", new Object[]{token, groupName}); signals.add(new FailureSuspectedSignalImpl(token, member.getGroupName(), member.getStartTime())); }
private void addInDoubtMemberSignals(final EventPacket packet) { final SystemAdvertisement advert = packet.getSystemAdvertisement(); final GMSMember member = Utility.getGMSMember(advert); final String token = member.getMemberToken(); getGMSContext().addToSuspectList(token); logger.log(Level.INFO, "gms.failureSuspectedEventReceived", new Object[]{token, groupName}); signals.add(new FailureSuspectedSignalImpl(token, member.getGroupName(), member.getStartTime())); }
private void newViewObserved(final EventPacket packet) { final GMSMember member = Utility.getGMSMember(packet.getSystemAdvertisement()); synchronized (views) { views.add(Collections.unmodifiableList(getMemberTokens(packet))); if (views.size() > MAX_VIEWS) { views.remove(0); } logger.log(Level.INFO, "membership.snapshot.analysis", new Object[]{packet.getClusterViewEvent().toString(), member.getMemberToken(), member.getGroupName()}); Signal[] activeSignals = analyzeViewChange(packet); if (activeSignals.length != 0) { getGMSContext().getRouter().queueSignals(new SignalPacket(activeSignals)); } } }
private void analyzeMasterChangeView(final EventPacket packet) { final SystemAdvertisement advert = packet.getSystemAdvertisement(); final GMSMember member = Utility.getGMSMember( advert ); final String token = member.getMemberToken(); if ( !this.getGMSContext().isWatchdog() ) { addGroupLeadershipNotificationSignal( token, member.getGroupName(), member.getStartTime() ); } if (views.size() == 1 && ! getGMSContext().getGroupCommunicationProvider().isDiscoveryInProgress()) { //views list only contains 1 view which is assumed to be the 1st view. addNewMemberJoins(packet); } if (views.size() > 1 && packet.getClusterView().getSize() != getPreviousView().size()) { determineAndAddNewMemberJoins(); } }
private void newViewObserved(final EventPacket packet) { final GMSMember member = Utility.getGMSMember(packet.getSystemAdvertisement()); synchronized (views) { views.add(Collections.unmodifiableList(getMemberTokens(packet))); if (views.size() > MAX_VIEWS) { views.remove(0); } logger.log(Level.INFO, "membership.snapshot.analysis", new Object[]{packet.getClusterViewEvent().toString(), member.getMemberToken(), member.getGroupName()}); Signal[] activeSignals = analyzeViewChange(packet); if (activeSignals.length != 0) { getGMSContext().getRouter().queueSignals(new SignalPacket(activeSignals)); } } }
private void addFailureSignals(final EventPacket packet) { final SystemAdvertisement advert = packet.getSystemAdvertisement(); final GMSMember member = Utility.getGMSMember(advert); final String failedMember = member.getMemberToken(); if (member.getMemberType().equalsIgnoreCase(CORETYPE)) { List<GMSMember> previousView = getPreviousViewContaining(failedMember); logger.log(Level.INFO, "member.failed", new Object[]{failedMember, member.getGroupName()}); generateFailureRecoverySignals(previousView, failedMember, member.getGroupName(), member.getStartTime()); if (getGMSContext().getRouter().isFailureNotificationAFRegistered()) { signals.add(new FailureNotificationSignalImpl(failedMember, member.getGroupName(), member.getStartTime())); } if (logger.isLoggable(Level.FINE)){ logger.fine("removing newly added node from the suspected list..." + failedMember); } getGMSContext().removeFromSuspectList(failedMember); } }
private void addFailureSignals(final EventPacket packet) { final SystemAdvertisement advert = packet.getSystemAdvertisement(); final GMSMember member = Utility.getGMSMember(advert); final String failedMember = member.getMemberToken(); if (member.getMemberType().equalsIgnoreCase(CORETYPE)) { List<GMSMember> previousView = getPreviousViewContaining(failedMember); logger.log(Level.INFO, "member.failed", new Object[]{failedMember, member.getGroupName()}); generateFailureRecoverySignals(previousView, failedMember, member.getGroupName(), member.getStartTime()); if (getGMSContext().getRouter().isFailureNotificationAFRegistered()) { signals.add(new FailureNotificationSignalImpl(failedMember, member.getGroupName(), member.getStartTime())); } if (logger.isLoggable(Level.FINE)){ logger.fine("removing newly added node from the suspected list..." + failedMember); } getGMSContext().removeFromSuspectList(failedMember); } }
private void analyzeMasterChangeView(final EventPacket packet) { final SystemAdvertisement advert = packet.getSystemAdvertisement(); final GMSMember member = Utility.getGMSMember( advert ); final String token = member.getMemberToken(); if ( !this.getGMSContext().isWatchdog() ) { addGroupLeadershipNotificationSignal( token, member.getGroupName(), member.getStartTime() ); } if (views.size() == 1 && ! getGMSContext().getGroupCommunicationProvider().isDiscoveryInProgress()) { //views list only contains 1 view which is assumed to be the 1st view. addNewMemberJoins(packet); } if (views.size() > 1 && packet.getClusterView().getSize() != getPreviousView().size()) { determineAndAddNewMemberJoins(); } }
private void addPlannedShutdownSignals(final EventPacket packet) { final SystemAdvertisement advert = packet.getSystemAdvertisement(); final String token = advert.getName(); final DistributedStateCache dsc = getGMSContext().getDistributedStateCache(); final GMSConstants.shutdownType shutdownType; if (packet.getClusterViewEvent().equals(ClusterViewEvents.CLUSTER_STOP_EVENT)) { shutdownType = GMSConstants.shutdownType.GROUP_SHUTDOWN; } else { shutdownType = GMSConstants.shutdownType.INSTANCE_SHUTDOWN; if (dsc != null) { dsc.removeAllForMember(token); } } logger.log(Level.INFO, "plannedshutdownevent.announcement", new Object[]{token, shutdownType, groupName}); String gName = Utility.getGroupName(advert); if (gName == null) { logger.log(Level.WARNING, "systemadv.not.contain.customtag", CustomTagNames.GROUP_NAME); return; } long startTime = Utility.getStartTime(advert); if (startTime == Utility.NO_SUCH_TIME) { logger.log(Level.WARNING, "systemadv.not.contain.customtag", CustomTagNames.START_TIME); return; } signals.add(new PlannedShutdownSignalImpl(token, gName, startTime, shutdownType)); }
private void addNewMemberJoins(final EventPacket packet) { final SystemAdvertisement advert = packet.getSystemAdvertisement(); final GMSMember member = Utility.getGMSMember(advert); final String token = member.getMemberToken(); final List<String> oldMembers = getTokens(getPreviousView()); RejoinSubevent rjse = getGMSContext().getInstanceRejoins().get(packet.getSystemAdvertisement().getName()); if (logger.isLoggable(Level.FINE)) { logger.log(Level.FINE, "addNewMemberJoins: member: " + member + " joined group time:" + new Date(Utility.getStartTime(advert)) + " rejoin subevent=" + rjse); } // Series of checks needed to avoid duplicate ADD messages. // This conditional was added to avoid duplicate ADD events caused // by GroupLeaderShip change notifications. // The coordinator handles ADD event differently than all other members. // Lastly, this instance is always added to view so let ADD event through w/o check for this instance. if (isCoordinator() || ! oldMembers.contains(token) || rjse != null || token.compareTo(getGMSContext().getServerIdentityToken()) == 0) { if (packet.getClusterView().getSize() > 1) { // TODO: Figure out a better way to sync syncDSC(advert.getID()); } if (member.isCore()) { addJoinNotificationSignal(token, member.getGroupName(), member.getStartTime()); } } }
private void addNewMemberJoins(final EventPacket packet) { final SystemAdvertisement advert = packet.getSystemAdvertisement(); final GMSMember member = Utility.getGMSMember(advert); final String token = member.getMemberToken(); final List<String> oldMembers = getTokens(getPreviousView()); RejoinSubevent rjse = getGMSContext().getInstanceRejoins().get(packet.getSystemAdvertisement().getName()); if (logger.isLoggable(Level.FINE)) { logger.log(Level.FINE, "addNewMemberJoins: member: " + member + " joined group time:" + new Date(Utility.getStartTime(advert)) + " rejoin subevent=" + rjse); } // Series of checks needed to avoid duplicate ADD messages. // This conditional was added to avoid duplicate ADD events caused // by GroupLeaderShip change notifications. // The coordinator handles ADD event differently than all other members. // Lastly, this instance is always added to view so let ADD event through w/o check for this instance. if (isCoordinator() || ! oldMembers.contains(token) || rjse != null || token.compareTo(getGMSContext().getServerIdentityToken()) == 0) { if (packet.getClusterView().getSize() > 1) { // TODO: Figure out a better way to sync syncDSC(advert.getID()); } if (member.isCore()) { addJoinNotificationSignal(token, member.getGroupName(), member.getStartTime()); } } }
private void determineAndAddNewMemberJoins() { final List<GMSMember> newMembership = getCurrentView(); String token; if (views.size() == 1) { if (newMembership.size() > 1) { for (GMSMember member : newMembership) { token = member.getMemberToken(); if (!token.equals(getGMSContext().getServerIdentityToken())) { syncDSC(token); } if (member.getMemberType().equalsIgnoreCase(CORETYPE)) { addJoinNotificationSignal(token, member.getGroupName(), member.getStartTime()); } } } } else if (views.size() > 1) { final List<String> oldMembers = getTokens(getPreviousView()); for (GMSMember member : newMembership) { token = member.getMemberToken(); if (!oldMembers.contains(token)) { syncDSC(token); if (member.getMemberType().equalsIgnoreCase(CORETYPE)) { addJoinNotificationSignal(token, member.getGroupName(), member.getStartTime()); } } } } }