case ADD_EVENT: case NO_LONGER_INDOUBT_EVENT: addNewMemberJoins(packet); break; case CLUSTER_STOP_EVENT: addPlannedShutdownSignals(packet); break; case FAILURE_EVENT: addFailureSignals(packet); break; case IN_DOUBT_EVENT: addInDoubtMemberSignals(packet); break; case JOINED_AND_READY_EVENT: addReadyMembers(packet); break; case MASTER_CHANGE_EVENT: analyzeMasterChangeView(packet); break; case PEER_STOP_EVENT: addPlannedShutdownSignals(packet); break; default:
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 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()); } } } } }
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 addReadyMembers(final EventPacket packet) { final SystemAdvertisement advert = packet.getSystemAdvertisement(); final String token = advert.getName(); final GMSMember member = Utility.getGMSMember(advert); if (member.isCore()) { addJoinedAndReadyNotificationSignal(token, member.getGroupName(), member.getStartTime()); } }
viewQueue = new ArrayBlockingQueue<EventPacket>(MAX_VIEWS_IN_QUEUE, Boolean.TRUE); viewWindow = new ViewWindowImpl(groupName, viewQueue);
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 addReadyMembers(final EventPacket packet) { final SystemAdvertisement advert = packet.getSystemAdvertisement(); final String token = advert.getName(); final GMSMember member = Utility.getGMSMember(advert); if (member.isCore()) { addJoinedAndReadyNotificationSignal(token, member.getGroupName(), member.getStartTime()); } }
viewQueue = new ArrayBlockingQueue<EventPacket>(MAX_VIEWS_IN_QUEUE, Boolean.TRUE); viewWindow = new ViewWindowImpl(groupName, viewQueue);
case ADD_EVENT: case NO_LONGER_INDOUBT_EVENT: addNewMemberJoins(packet); break; case CLUSTER_STOP_EVENT: addPlannedShutdownSignals(packet); break; case FAILURE_EVENT: addFailureSignals(packet); break; case IN_DOUBT_EVENT: addInDoubtMemberSignals(packet); break; case JOINED_AND_READY_EVENT: addReadyMembers(packet); break; case MASTER_CHANGE_EVENT: analyzeMasterChangeView(packet); break; case PEER_STOP_EVENT: addPlannedShutdownSignals(packet); break; default:
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()); } } } } }
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(); } }