protected Address determineCoordinator() { return view != null? view.getCoord() : null; }
public static boolean isCoordinator(View view,Address local_addr) { if(view == null || local_addr == null) return false; Address coord=view.getCoord(); return local_addr.equals(coord); }
@Override public boolean isCoordinator() { return this.localAddress.equals(this.view.getCoord()); }
private void handleTmpView(View v) { Address new_coord=v.getCoord(); if(new_coord != null && !new_coord.equals(coord) && local_addr != null && local_addr.equals(new_coord)) handleViewChange(v); }
@Override public Node getCoordinator() { return this.factory.createNode(this.view.getCoord()); }
protected void handleViewChange(View v) { lock.lock(); try { this.view=v; coordinator=v.getCoord(); resetDigest(); if(!initialized) initialized=true; } finally { lock.unlock(); } }
private void handleTmpView(View v) { Address new_coord=v.getCoord(); if(new_coord != null && !new_coord.equals(coord) && local_addr != null && local_addr.equals(new_coord)) handleViewChange(v); }
protected void handleViewChange(View view) { Address new_coord=view.getCoord(); boolean coord_changed=!Objects.equals(coord, new_coord); if(coord_changed || received_not_coord) { if(received_not_coord) received_not_coord=false; // resend all messages to the new coordinator (make copies) fwd_queue.flush(new_coord, view.getMembers()); coord=new_coord; } }
protected void handleView(View view) { Address old_coord=this.view != null? this.view.getCoord() : null; this.view=view; if(Objects.equals(view.getCoord(), local_addr)) { if(!Objects.equals(old_coord, local_addr)) { try { becomeKeyserver(); } catch(Exception e) { log.error("failed becoming key server", e); } } } else { // stop being keyserver, close the server socket and handler if(Objects.equals(old_coord, local_addr)) stopKeyserver(); } }
/** * Iterates over the list of members and adds every member if the member's rank is below max_site_masters. Skips * members which cannot become site masters (can_become_site_master == false). If no site master can be found, * the first member of the view will be returned (even if it has can_become_site_master == false) */ protected List<Address> determineSiteMasters(View view) { List<Address> retval=new ArrayList<>(view.size()); int selected=0; for(Address member: view) { if(member instanceof ExtendedUUID && !((ExtendedUUID)member).isFlagSet(can_become_site_master_flag)) continue; if(selected++ < max_site_masters) retval.add(member); } if(retval.isEmpty()) { Address coord=view.getCoord(); if(coord != null) retval.add(coord); } return retval; }
public void start(String props, String name) throws Exception { this.props=props; this.name=name; StringBuilder sb=new StringBuilder(); sb.append("\n\n----------------------- MPerf -----------------------\n"); sb.append("Date: ").append(new Date()).append('\n'); sb.append("Run by: ").append(System.getProperty("user.name")).append("\n"); sb.append("JGroups version: ").append(Version.description).append('\n'); System.out.println(sb); channel=new JChannel(props); channel.setName(name); channel.setReceiver(this); channel.connect("mperf"); local_addr=channel.getAddress(); JmxConfigurator.registerChannel(channel, Util.getMBeanServer(), "jgroups", "mperf", true); // send a CONFIG_REQ to the current coordinator, so we can get the current config Address coord=channel.getView().getCoord(); if(coord != null && !local_addr.equals(coord)) send(coord,null,MPerfHeader.CONFIG_REQ, Message.Flag.RSVP); }
public void handleView(View view) { super.handleView(view); Address old_coord=coord; if(view.size() > 0) { coord=view.getCoord(); is_coord=coord.equals(local_addr); log.debug("[%s] coord=%s, is_coord=%b", local_addr, coord, is_coord); } if(is_coord && num_backups > 0) { List<Address> new_backups=Util.pickNext(view.getMembers(), local_addr, num_backups); List<Address> copy_locks_list=null; synchronized(backups) { if(!backups.equals(new_backups)) { copy_locks_list=new ArrayList<>(new_backups); copy_locks_list.removeAll(backups); backups.clear(); backups.addAll(new_backups); } } if(copy_locks_list != null && !copy_locks_list.isEmpty()) copyLocksTo(copy_locks_list); } // For all non-acquired client locks, send the GRANT_LOCK request to the new coordinator (if changed) if(old_coord != null && !old_coord.equals(coord)) client_lock_table.resendPendingLockRequests(); }
@Override public void handleView(View v) { Address old_coord=this.view != null? this.view.getCoord() : null; super.handleView(v); if(v.size() > 0) { coord=v.getCoord(); log.debug("%s: coord=%s, is_coord=%b", local_addr, coord, isCoord()); } if(Objects.equals(local_addr, coord)) { if(v instanceof MergeView || !Objects.equals(local_addr, old_coord)) { // I'm the new coord: run reconciliation to find all existing locks (and pending lock/unlock requests) runReconciliation(); req_handler.start(); } } else { if(Objects.equals(local_addr, old_coord)) { log.debug("%s: not coordinator anymore; stopping the request handler", local_addr); req_handler.stop(); // clears the req-queue server_locks.clear(); } } }
public void start(String props, String name) throws Exception { this.props=props; this.name=name; StringBuilder sb=new StringBuilder(); sb.append("\n\n----------------------- MPerf -----------------------\n"); sb.append("Date: ").append(new Date()).append('\n'); sb.append("Run by: ").append(System.getProperty("user.name")).append("\n"); sb.append("JGroups version: ").append(Version.description).append('\n'); System.out.println(sb); channel=new JChannel(props); channel.setName(name); disp=new RpcDispatcher(channel, this).setMembershipListener(this).setMethodLookup(id -> METHODS[id]) .setMarshaller(new MperfMarshaller()); send_options.mode(sync? ResponseMode.GET_ALL : ResponseMode.GET_NONE); if(oob) send_options.flags(Message.Flag.OOB); channel.connect("mperf"); local_addr=channel.getAddress(); JmxConfigurator.registerChannel(channel, Util.getMBeanServer(), "jgroups", "mperf", true); // send a CONFIG_REQ to the current coordinator, so we can get the current config Address coord=channel.getView().getCoord(); if(coord != null && !local_addr.equals(coord)) invokeRpc(configReq, coord, RequestOptions.ASYNC().flags(Message.Flag.RSVP), local_addr); }
public void handleView(View view) { Address oldCoord = coord; if(view.size() > 0) { coord=view.getCoord(); is_coord=coord.equals(local_addr); if(log.isDebugEnabled())
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; } } }
key_server_addr=v.getCoord(); // the coordinator is the keyserver if(Objects.equals(key_server_addr, local_addr)) { if(!Objects.equals(key_server_addr, old_key_server))
protected void handleEvent(Event evt) { switch(evt.getType()) { case Event.VIEW_CHANGE: View old_view=view, new_view=evt.getArg(); this.view=new_view; if(old_view == null) { // first join Util.sleepRandom(0, stagger_timeout); // 1. send my own mapping to all multicastOwnMapping(); // 2. ask the coordinator to send us the cache contents Address coord=new_view.getCoord(); if(Objects.equals(local_addr, coord)) return; Message msg=new Message(coord).setFlag(Message.Flag.OOB).putHeader(id, new Header(Type.CACHE_REQ)); down_prot.down(msg); return; } if(new_view instanceof MergeView) { Util.sleepRandom(0, stagger_timeout); multicastOwnMapping(); } break; case Event.SET_LOCAL_ADDRESS: local_addr=evt.getArg(); break; } }
startViewConsistencyChecker(); Address coord=view.getCoord(); if(Objects.equals(coord, local_addr)) is_coord=true;
View old_view=view; view=evt.getArg(); current_coord=view.getCoord(); is_coord=Objects.equals(current_coord, local_addr); Object retval=down_prot.down(evt);