protected boolean differentViewIds() { ViewId first=null; synchronized(views) { for(ViewId view_id : views.values()) { if(first == null) first=view_id; else if(!first.equals(view_id)) return true; } } return false; }
public static boolean containsViewId(Collection<View> views,ViewId vid) { for(View view : views) { ViewId tmp=view.getViewId(); if(tmp.equals(vid)) return true; } return false; }
/** Returns true if all views are the same. Uses the view IDs for comparison */ public static boolean sameViews(View ... views) { ViewId first_view_id=views[0].getViewId(); return Stream.of(views).allMatch(v -> v.getViewId().equals(first_view_id)); }
public static boolean sameViews(Collection<View> views) { ViewId first_view_id=views.iterator().next().getViewId(); return views.stream().allMatch(v -> v.getViewId().equals(first_view_id)); }
protected View createViewFromDeltaView(View current_view, DeltaView delta_view) { if(current_view == null || delta_view == null) throw new IllegalStateException("current view (" + current_view + ") or delta view (" + delta_view + ") is null"); ViewId current_view_id=current_view.getViewId(), delta_ref_view_id=delta_view.getRefViewId(), delta_view_id=delta_view.getViewId(); if(!current_view_id.equals(delta_ref_view_id)) throw new IllegalStateException("the view-id of the delta view ("+delta_ref_view_id+") doesn't match the " + "current view-id ("+current_view_id+"); discarding delta view " + delta_view); List<Address> current_mbrs=current_view.getMembers(); List<Address> left_mbrs=Arrays.asList(delta_view.getLeftMembers()); List<Address> new_mbrs=Arrays.asList(delta_view.getNewMembers()); List<Address> new_mbrship=computeNewMembership(current_mbrs,new_mbrs,left_mbrs,Collections.emptyList()); return new View(delta_view_id, new_mbrship); }
public void viewAccepted(View view) { if(bridge_view != null && bridge_view.getViewId().equals(view.getViewId())) return; int prev_members=bridge_view != null? bridge_view.size() : 0; bridge_view=view; switch(view.size()) { case 1: // the remote cluster disappeared, remove all of its addresses from the view if(prev_members > 1 && view.getCoord().equals(bridge.getAddress())) { remote_view=null; View new_global_view=generateGlobalView(local_view, null); sendViewOnLocalCluster(null, new_global_view, false, null); } break; case 2: startRemoteViewFetcher(); break; default: // System.err.println("View size of > 2 is invalid: view=" + view); break; } } }
if(!view_id.equals(this.view.getViewId())) { log.trace("%s: discarded STABILITY message with different view-id %s (my view-id=%s)", local_addr, view_id, view);
if(!view_id.equals(view.getViewId())) { log.trace("%s: discarded STABLE message with different view-id %s (my view-id=%s)", local_addr, view_id, view.getViewId());
protected boolean differentViewIds() { ViewId first=null; synchronized(views) { for(ViewId view_id : views.values()) { if(first == null) first=view_id; else if(!first.equals(view_id)) return true; } } return false; }
public static boolean containsViewId(Collection<View> views,ViewId vid) { for(View view : views) { ViewId tmp=view.getViewId(); if(tmp.equals(vid)) return true; } return false; }
public static boolean sameViews(Collection<View> views) { ViewId first_view_id=views.iterator().next().getViewId(); return views.stream().allMatch(v -> v.getViewId().equals(first_view_id)); }
/** Returns true if all views are the same. Uses the view IDs for comparison */ public static boolean sameViews(View ... views) { ViewId first_view_id=views[0].getViewId(); return Stream.of(views).allMatch(v -> v.getViewId().equals(first_view_id)); }
if(!this.merge_id.equals(merge_id)) { if(log.isErrorEnabled()) log.error("this.merge_id (" + this.merge_id
public void handleMergeCancelled(ViewId merge_id) { if(merge_id != null && this.merge_id != null && this.merge_id.equals(merge_id)) { if(log.isDebugEnabled()) log.debug("merge was cancelled (merge_id=" + merge_id + ", local_addr=" + gms.local_addr +")"); setMergeId(null); this.merge_leader=null; merging=false; gms.getViewHandler().resume(merge_id); } }
protected View createViewFromDeltaView(View current_view, DeltaView delta_view) { if(current_view == null || delta_view == null) throw new IllegalStateException("current view (" + current_view + ") or delta view (" + delta_view + ") is null"); ViewId current_view_id=current_view.getViewId(), delta_ref_view_id=delta_view.getRefViewId(), delta_view_id=delta_view.getViewId(); if(!current_view_id.equals(delta_ref_view_id)) throw new IllegalStateException("the view-id of the delta view ("+delta_ref_view_id+") doesn't match the " + "current view-id ("+current_view_id+"); discarding delta view " + delta_view); List<Address> current_mbrs=current_view.getMembers(); List<Address> left_mbrs=Arrays.asList(delta_view.getLeftMembers()); List<Address> new_mbrs=Arrays.asList(delta_view.getNewMembers()); List<Address> new_mbrship=computeNewMembership(current_mbrs,new_mbrs,left_mbrs,Collections.emptyList()); return new View(delta_view_id, new_mbrship); }
/** * If merge_id is not equal to this.merge_id then discard. * Else cast the view/digest to all members of this group. */ public void handleMergeView(MergeData data, ViewId merge_id) { if(merge_id == null || this.merge_id == null || !this.merge_id.equals(merge_id)) { if(log.isErrorEnabled()) log.error("merge_ids don't match (or are null); merge view discarded"); return; } java.util.List my_members=gms.view != null? gms.view.getMembers() : null; // only send to our *current* members, if we have A and B being merged (we are B), then we would *not* // receive a VIEW_ACK from A because A doesn't see us in the pre-merge view yet and discards the view GMS.Request req=new GMS.Request(GMS.Request.VIEW); req.view=data.view; req.digest=data.digest; req.target_members=my_members; gms.getViewHandler().add(req, true, // at head so it is processed next true); // un-suspend the queue merging=false; }
public void viewAccepted(View view) { if(bridge_view != null && bridge_view.getViewId().equals(view.getViewId())) return; int prev_members=bridge_view != null? bridge_view.size() : 0; bridge_view=view; switch(view.size()) { case 1: // the remote cluster disappeared, remove all of its addresses from the view if(prev_members > 1 && view.getCoord().equals(bridge.getAddress())) { remote_view=null; View new_global_view=generateGlobalView(local_view, null); sendViewOnLocalCluster(null, new_global_view, false, null); } break; case 2: startRemoteViewFetcher(); break; default: // System.err.println("View size of > 2 is invalid: view=" + view); break; } } }
if(!view_id.equals(this.view.getViewId())) { log.trace("%s: discarded STABILITY message with different view-id %s (my view-id=%s)", local_addr, view_id, view);
if(!view_id.equals(view.getViewId())) { log.trace("%s: discarded STABLE message with different view-id %s (my view-id=%s)", local_addr, view_id, view.getViewId());