/** * 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)); } }); }); } }
.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)); LOGGER.debug("{} - Updated management group {} from {}", membershipService.getLocalMember().id(), systemGroup, info.memberId); .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); post(new PartitionGroupMembershipEvent(MEMBERS_CHANGED, newGroup));
this.messagingService = messagingService; this.systemGroup = systemGroup != null ? new PartitionGroupMembership( systemGroup.name(), systemGroup.config(), ImmutableSet.of(membershipService.getLocalMember().id()), true) : null; groups.forEach(group -> { this.groups.put(group.name(), new PartitionGroupMembership( group.name(), group.config(),