@Override public String toString() { return toStringHelper(this) .add("group", group()) .add("members", members()) .toString(); } }
/** * Handles a cluster membership change. */ private void handleMembershipChange(ClusterMembershipEvent event) { if (event.type() == ClusterMembershipEvent.Type.MEMBER_ADDED) { bootstrap(event.subject()); } else if (event.type() == ClusterMembershipEvent.Type.MEMBER_REMOVED) { threadContext.execute(() -> { PartitionGroupMembership systemGroup = this.systemGroup; if (systemGroup != null && systemGroup.members().contains(event.subject().id())) { Set<MemberId> newMembers = Sets.newHashSet(systemGroup.members()); newMembers.remove(event.subject().id()); PartitionGroupMembership newMembership = new PartitionGroupMembership(systemGroup.group(), systemGroup.config(), ImmutableSet.copyOf(newMembers), true); this.systemGroup = newMembership; post(new PartitionGroupMembershipEvent(MEMBERS_CHANGED, newMembership)); } groups.values().forEach(group -> { if (group.members().contains(event.subject().id())) { Set<MemberId> newMembers = Sets.newHashSet(group.members()); newMembers.remove(event.subject().id()); PartitionGroupMembership newMembership = new PartitionGroupMembership(group.group(), group.config(), ImmutableSet.copyOf(newMembers), false); groups.put(group.group(), newMembership); post(new PartitionGroupMembershipEvent(MEMBERS_CHANGED, newMembership)); } }); }); } }
throw new ConfigurationException("Duplicate system group detected"); } else { Set<MemberId> newMembers = Stream.concat(systemGroup.members().stream(), info.systemGroup.members().stream()) .filter(memberId -> membershipService.getMember(memberId) != null) .collect(Collectors.toSet()); if (!Sets.difference(newMembers, systemGroup.members()).isEmpty()) { systemGroup = new PartitionGroupMembership(systemGroup.group(), systemGroup.config(), ImmutableSet.copyOf(newMembers), true); post(new PartitionGroupMembershipEvent(MEMBERS_CHANGED, systemGroup)); throw new ConfigurationException("Duplicate partition group " + newMembership.group() + " detected"); } else { Set<MemberId> newMembers = Stream.concat(oldMembership.members().stream(), newMembership.members().stream()) .filter(memberId -> membershipService.getMember(memberId) != null) .collect(Collectors.toSet()); if (!Sets.difference(newMembers, oldMembership.members()).isEmpty()) { PartitionGroupMembership newGroup = new PartitionGroupMembership(oldMembership.group(), oldMembership.config(), ImmutableSet.copyOf(newMembers), false); groups.put(oldMembership.group(), newGroup);
for (MemberId memberId : membership.members()) { Member member = clusterMembershipService.getMember(memberId); if (member != null && member.isReachable()) {
electionService, new DefaultSessionIdService()); if (systemGroupMembership.members().contains(clusterMembershipService.getLocalMember().id())) { return systemGroup.join(managementService); } else { if (membership.members().contains(clusterMembershipService.getLocalMember().id())) { return group.join(partitionManagementService); } else {
@SuppressWarnings("unchecked") private void handleMembershipChange(PartitionGroupMembershipEvent event) { if (partitionManagementService == null) { return; } if (!event.membership().system()) { synchronized (groups) { ManagedPartitionGroup group = groups.get(event.membership().group()); if (group == null) { group = ((PartitionGroup.Type) event.membership().config().getType()) .newPartitionGroup(event.membership().config()); groups.put(event.membership().group(), group); if (event.membership().members().contains(clusterMembershipService.getLocalMember().id())) { group.join(partitionManagementService); } else { group.connect(partitionManagementService); } } } } }