public boolean equals(Object obj) { return obj instanceof View && (this == obj || compareTo((View)obj) == 0); }
protected void handleViewChange(View v) { List<Address> mbrs=v.getMembers(); if(mbrs.isEmpty()) return; if(view == null || view.compareTo(v) < 0) view=v; else return; Address existing_coord=coord, new_coord=mbrs.get(0); boolean coord_changed=!Objects.equals(existing_coord, new_coord); if(coord_changed && new_coord != null) { coord=new_coord; // todo: if I'm the new coord, get the highest seqno from all members. If not, re-send my pending seqno reqs } if(new_coord != null) is_coord=new_coord.equals(local_addr); }
protected void handleViewChange(View v) { List<Address> mbrs=v.getMembers(); if(mbrs.isEmpty()) return; if(view == null || view.compareTo(v) < 0) view=v; else return; delivery_table.keySet().retainAll(mbrs); Address existing_coord=coord, new_coord=mbrs.get(0); boolean coord_changed=!Objects.equals(existing_coord, new_coord); if(coord_changed && new_coord != null) { stopFlusher(); startFlusher(new_coord); // needs to be done in the background, to prevent blocking if down() would block } }
public boolean equals(Object obj) { return obj instanceof View && (this == obj || compareTo((View)obj) == 0); }
protected void handleViewChange(View v) { List<Address> mbrs=v.getMembers(); if(mbrs.isEmpty()) return; if(view == null || view.compareTo(v) < 0) view=v; else return; Address existing_coord=coord, new_coord=mbrs.get(0); boolean coord_changed=!Objects.equals(existing_coord, new_coord); if(coord_changed && new_coord != null) { coord=new_coord; // todo: if I'm the new coord, get the highest seqno from all members. If not, re-send my pending seqno reqs } if(new_coord != null) is_coord=new_coord.equals(local_addr); }
protected void handleViewChange(View v) { List<Address> mbrs=v.getMembers(); if(mbrs.isEmpty()) return; if(view == null || view.compareTo(v) < 0) view=v; else return; delivery_table.keySet().retainAll(mbrs); Address existing_coord=coord, new_coord=mbrs.get(0); boolean coord_changed=!Objects.equals(existing_coord, new_coord); if(coord_changed && new_coord != null) { stopFlusher(); startFlusher(new_coord); // needs to be done in the background, to prevent blocking if down() would block } }