@Override protected void handleEvent(ClusterDistributionManager manager, MembershipListener listener) { listener.memberDeparted(manager, getId(), false); } }
@Override protected void handleEvent(ClusterDistributionManager manager, MembershipListener listener) { listener.memberJoined(manager, getId()); } }
@Override protected void handleEvent(ClusterDistributionManager manager, MembershipListener listener) { listener.quorumLost(manager, getFailures(), getRemaining()); } }
@Override protected void handleEvent(ClusterDistributionManager manager, MembershipListener listener) { listener.memberSuspect(manager, getId(), whoSuspected(), reason); } }
private void notifyListenersMemberRemoved(InternalDistributedMember member, boolean crashed) { Iterator it = membershipListeners.keySet().iterator(); while (it.hasNext()) { try { ((MembershipListener) it.next()).memberDeparted(getDistributionManagerWithNoCheck(), member, crashed); } catch (Exception e) { logger.warn("Ignoring exception during member departed listener notification", e); } } }
private void notifyListenersMemberAdded(InternalDistributedMember member) { Iterator it = membershipListeners.keySet().iterator(); while (it.hasNext()) { try { ((MembershipListener) it.next()).memberJoined(getDistributionManagerWithNoCheck(), member); } catch (Exception e) { logger.warn("Ignoring exception during member joined listener notification", e); } } }
@Override protected void handleEvent(ClusterDistributionManager manager, MembershipListener listener) { listener.memberDeparted(manager, getId(), true/* crashed */); } }
/** * Makes note of a new console that has started up in the distributed cache. * */ private void handleConsoleStartup(InternalDistributedMember theId) { // if we have an all listener then notify it NOW. HashSet<InternalDistributedMember> tmp = null; synchronized (this.membersLock) { // Note test is under membersLock if (membersAndAdmin.contains(theId)) return; // already accounted for // Note we don't modify in place. This allows reader to get snapshots // without locking. tmp = new HashSet<>(this.membersAndAdmin); tmp.add(theId); this.membersAndAdmin = Collections.unmodifiableSet(tmp); } // synchronized for (MembershipListener listener : allMembershipListeners) { listener.memberJoined(this, theId); } logger.info("DMMembership: Admitting new administration member < {} >.", theId); // Note that we don't add the member to the list of admin consoles until // we receive a message from them. }
listener.memberDeparted(this, theId, crashed);
@Test public void waitForElderStopsWaitingWhenUpdated() { ClusterElderManager clusterElderManager = new ClusterElderManager(clusterDistributionManager); when(clusterDistributionManager.getId()).thenReturn(member0); when(clusterDistributionManager.isCurrentMember(eq(member0))).thenReturn(true); AtomicReference<List<InternalDistributedMember>> currentMembers = new AtomicReference<>(Arrays.asList(member1, member0)); when(clusterDistributionManager.getViewMembers()).then(invocation -> currentMembers.get()); AtomicReference<MembershipListener> membershipListener = new AtomicReference<>(); doAnswer(invocation -> { membershipListener.set(invocation.getArgument(0)); return null; }).when(clusterDistributionManager).addMembershipListener(any()); Callable<Boolean> waitForElder = () -> clusterElderManager.waitForElder(member0); Callable<Void> updateMembershipView = () -> { // Wait for membership listener to be added await().until(() -> membershipListener.get() != null); currentMembers.set(Arrays.asList(member0)); membershipListener.get().memberDeparted(clusterDistributionManager, member1, true); return null; }; concurrencyRule.add(waitForElder).expectValue(true); concurrencyRule.add(updateMembershipView); concurrencyRule.executeInParallel(); assertThat(clusterElderManager.getElderId()).isEqualTo(member0); }