@Override public void viewAccepted(View view) { View oldView = this.view.getAndSet(view); if (oldView != null) { List<Address> leftMembers = View.leftMembers(oldView, view); if (leftMembers != null) { this.members.keySet().removeAll(leftMembers); } if (this.listeners.isEmpty()) { Address localAddress = this.dispatcher.getChannel().getAddress(); ViewMembership oldMembership = new ViewMembership(localAddress, oldView, this); ViewMembership membership = new ViewMembership(localAddress, view, this); for (Map.Entry<GroupListener, ExecutorService> entry : this.listeners.entrySet()) { GroupListener listener = entry.getKey(); ExecutorService executor = entry.getValue(); try { executor.submit(new ListenerTask(listener, oldMembership, membership, view instanceof MergeView)); } catch (RejectedExecutionException e) { // Executor was shutdown } } } } }
/** * Updates the current view in use and returns a {@link Collection} with the members that left the cluster. */ public final Collection<Address> handleView(View newView) { View oldView; synchronized (deliverySet) { oldView = getAndSetView(newView); deliverySet.removeIf(this::removeMessage); notifyIfNeeded(); } return View.leftMembers(oldView, newView); }
List<Address> curr_mbrs, left_mbrs, new_mbrs; curr_mbrs=new ArrayList<>(view.getMembers()); left_mbrs=View.leftMembers(old_view, view); new_mbrs=View.newMembers(old_view, view);
@Override public void viewAccepted(View view) { View oldView = this.view.getAndSet(view); if (oldView != null) { List<Address> leftMembers = View.leftMembers(oldView, view); if (leftMembers != null) { this.members.keySet().removeAll(leftMembers); } if (this.listeners.isEmpty()) { Address localAddress = this.dispatcher.getChannel().getAddress(); ViewMembership oldMembership = new ViewMembership(localAddress, oldView, this); ViewMembership membership = new ViewMembership(localAddress, view, this); for (Map.Entry<GroupListener, ExecutorService> entry : this.listeners.entrySet()) { GroupListener listener = entry.getKey(); ExecutorService executor = entry.getValue(); try { executor.submit(new ListenerTask(listener, oldMembership, membership, view instanceof MergeView)); } catch (RejectedExecutionException e) { // Executor was shutdown } } } } }
/** * Updates the current view in use and returns a {@link Collection} with the members that left the cluster. */ public final Collection<Address> handleView(View newView) { View oldView; synchronized (deliverySet) { oldView = getAndSetView(newView); deliverySet.removeIf(this::removeMessage); notifyIfNeeded(); } return View.leftMembers(oldView, newView); }
List<Address> curr_mbrs, left_mbrs, new_mbrs; curr_mbrs=new ArrayList<>(view.getMembers()); left_mbrs=View.leftMembers(old_view, view); new_mbrs=View.newMembers(old_view, view);