/** Checks if two views have the same members regardless of order. E.g. {A,B,C} and {B,A,C} returns true */ public static boolean sameMembers(View v1, View v2) { if(v1 == v2) return true; if(v1.size() != v2.size()) return false; Address[][] diff=diff(v1, v2); return diff[0].length == 0 && diff[1].length == 0; }
@ManagedAttribute public int getClusterSize() { return view != null? view.size() : 0; }
/** Returns a map containing the site keys and addresses as values */ protected Map<String,List<Address>> extract(View view) { Map<String,List<Address>> map=new HashMap<>(view.size()); for(Address mbr: view) { SiteAddress member=(SiteAddress)mbr; String key=member.getSite(); List<Address> list=map.computeIfAbsent(key, k -> new ArrayList<>()); if(!list.contains(member)) list.add(member); } return map; } }
public void viewAccepted(View new_view) { System.out.println("Accepted view (" + new_view.size() + new_view.getMembers() + ')'); }
public void viewAccepted(View new_view) { setTitle("Members in " + channel_name + ": " + (new_view.size() - 1)); }
public void viewAccepted(View v) { List<Address> mbrs=v.getMembers(); System.out.println("View accepted: " + v); member_size=v.size(); if(mbr_label != null) mbr_label.setText(member_size + " mbr(s)"); members.clear(); members.addAll(mbrs); }
@Override public List<Node> getMembers() { List<Node> members = new ArrayList<>(this.view.size()); for (Address address : this.view.getMembersRaw()) { members.add(this.factory.createNode(address)); } return members; }
void setAnycastCount() throws Exception { int tmp=Util.readIntFromStdin("Anycast count: "); View view=channel.getView(); if(tmp > view.size()) { System.err.println("anycast count must be smaller or equal to the view size (" + view + ")\n"); return; } anycast_count=tmp; System.out.println("set anycast_count=" + anycast_count); }
public static boolean allChannelsHaveSameView(JChannel... channels) { View first=channels[0].getView(); for(JChannel ch : channels) { View view=ch.getView(); if(!Objects.equals(view, first) || view.size() != channels.length) return false; } return true; }
int getAnycastCount() throws Exception { int tmp=Util.readIntFromStdin("Anycast count: "); View tmp_view=channel.getView(); if(tmp > tmp_view.size()) { System.err.println("anycast count must be smaller or equal to the view size (" + tmp_view + ")\n"); return -1; } return tmp; }
public String condition() { View view=sv.getView(); return "Membership is " + (view != null? view.size() : "n/a") + ", FD.Monitor running=" + fd.isMonitorRunning(); }
protected void handleView(View view) { view_size=view.size(); Address tmp=Util.pickNext(view.getMembers(), local_addr); if(tmp != null && !tmp.equals(local_addr)) { next=tmp; if(log.isDebugEnabled()) log.debug("next=" + next); } }
protected String defaultHeaders() { if(transport == null) return ""; Address local_addr=transport.localAddress(); View view=transport.view(); int num_members=view != null? view.size() : 0; return String.format("local_addr=%s [ip=%s, version=%s, cluster=%s, %d mbr(s)]\n", local_addr != null? local_addr : "n/a", transport.getLocalPhysicalAddress(), Version.description, transport.getClusterName(), num_members); }
public void viewAccepted(View v) { if(v != null && mbr_label != null) mbr_label.setText(v.size() + " mbr(s)"); if(panel != null) panel.adjustNodes(v.getMembers()); }
@GuardedBy("lock") protected void resetDigest() { if(view == null) return; digest=new MutableDigest(view.getMembersRaw()); // .set(getDigest()); votes=new FixedSizeBitSet(view.size()); // all 0's initially }
private void _setTitle() { int num=map.getChannel().getView().size(); setTitle("ReplicatedHashMapDemo: " + num + " server(s)"); }
public boolean eval() { return sv.getView() != null && sv.getView().size() > 1 && !fd.isMonitorRunning(); }
protected void sendJoinResponses(JoinRsp jr, Collection<Address> joiners) { if(jr == null || joiners == null || joiners.isEmpty()) return; Buffer marshalled_jr=marshal(jr); for(Address joiner: joiners) { log.trace("%s: sending join-rsp to %s: view=%s (%d mbrs)", local_addr, joiner, jr.getView(), jr.getView().size()); sendJoinResponse(marshalled_jr, joiner); } }
public Object down(final Event evt) { switch(evt.getType()) { case Event.VIEW_CHANGE: handleView(evt.getArg()); break; case Event.TMP_VIEW: view_size=((View)evt.getArg()).size(); break; case Event.SET_LOCAL_ADDRESS: local_addr=evt.getArg(); break; } return down_prot.down(evt); }
protected void start(String props, String name) throws Exception { channel=new JChannel(props).name(name); // TP transport=channel.getProtocolStack().getTransport(); // transport.setThreadPool(new DirectExecutor()); disp=new RpcDispatcher(channel, this).setMembershipListener(this); disp.setMethodLookup(ignored -> requestMethod); channel.connect("rt"); View view=channel.getView(); if(view.size() > 2) System.err.printf("More than 2 members found (%s); terminating\n", view); else loop(); Util.close(channel, disp); }