public void init() throws Exception { super.init(); TP tmp=getTransport(); if(!(tmp instanceof SHARED_LOOPBACK)) throw new IllegalStateException("the transport must be " + SHARED_LOOPBACK.class.getSimpleName()); }
public void stop() { super.stop(); stubManager.disconnectStubs(); }
return null; // prevents merging back a leaving member (https://issues.jboss.org/browse/JGRP-1336) PingData data=readPingData(msg.getRawBuffer(), msg.getOffset(), msg.getLength()); Address logical_addr=data != null? data.getAddress() : msg.src(); addDiscoveryResponseToCaches(logical_addr, data.getLogicalName(), data.getPhysicalAddr()); discoveryRequestReceived(msg.getSrc(), data.getLogicalName(), data.getPhysicalAddr()); addResponse(data, false); Map<Address,PhysicalAddress> cache=(Map<Address,PhysicalAddress>)down(new Event(Event.GET_LOGICAL_PHYSICAL_MAPPINGS)); if(cache != null) { for(Map.Entry<Address,PhysicalAddress> entry: cache.entrySet()) { sendDiscoveryResponse(addr, physical_addr, NameCache.get(addr), msg.getSrc(), isCoord(addr)); if(drop_because_of_rank || (mbrs != null && !mbrs.contains(local_addr))) return null; PhysicalAddress physical_addr=(PhysicalAddress)down(new Event(Event.GET_PHYSICAL_ADDRESS, local_addr)); sendDiscoveryResponse(local_addr, physical_addr, NameCache.get(local_addr), msg.getSrc(), is_coord); return null; handleDiscoveryResponse(data, msg.src());
protected void findMembers(List<Address> members, boolean initial_discovery, Responses rsps, boolean async) { for(Discovery discovery_protocol: discovery_protocols) { discovery_protocol.addResponse(rsps); if(async || async_discovery) timer.execute(() -> discovery_protocol.findMembers(members, initial_discovery, rsps)); else discovery_protocol.findMembers(members, initial_discovery, rsps); } }
public Responses findMembers(final List<Address> members, final boolean initial_discovery, boolean async, long timeout) { num_discovery_requests++; int num_expected=members != null? members.size() : 0; int capacity=members != null? members.size() : 16; Responses rsps=new Responses(num_expected, initial_discovery && break_on_coord_rsp, capacity); addResponse(rsps); if(async || async_discovery || (num_discovery_runs > 1) && initial_discovery) { timer.execute(() -> invokeFindMembers(members, initial_discovery, rsps, async)); if(num_discovery_runs > 1 && initial_discovery) { int num_reqs_to_send=num_discovery_runs-1; long last_send=timeout - (timeout/num_discovery_runs); long interval=last_send/num_reqs_to_send; for(long i=0,delay=interval; i < num_reqs_to_send; i++,delay+=interval) { Future<?> future=timer.schedule(() -> invokeFindMembers(members, initial_discovery, rsps, async), delay, TimeUnit.MILLISECONDS); this.discovery_req_futures.add(future); num_discovery_requests++; } } } else invokeFindMembers(members, initial_discovery, rsps, async); weedOutCompletedDiscoveryResponses(); return rsps; }
protected void handleDiscoveryResponse(PingData data, Address sender) { // add physical address (if available) to transport's cache Address logical_addr=data.getAddress() != null? data.getAddress() : sender; addDiscoveryResponseToCaches(logical_addr, data.getLogicalName(), data.getPhysicalAddr()); boolean overwrite=Objects.equals(logical_addr, sender); addResponse(data, overwrite); }
case Event.FIND_INITIAL_MBRS: // sent by GMS layer long timeout=evt.getArg(); return findMembers(null, true, false, timeout); // triggered by JOIN process (ClientGmsImpl) return findMembers(evt.getArg(), false, false, 0); // triggered by MERGE3 return findMembers(null, false, false, 0); // triggered by MERGE3 is_coord=Objects.equals(current_coord, local_addr); Object retval=down_prot.down(evt); if(send_cache_on_join && !isDynamic() && is_coord) { 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); startCacheDissemination(curr_mbrs, left_mbrs, new_mbrs); // separate task cluster_name=evt.getArg(); Object ret=down_prot.down(evt); handleConnect(); return ret; handleDisconnect(); return down_prot.down(evt);
public void discoveryRequestReceived(Address sender, String logical_name, PhysicalAddress physical_addr) { super.discoveryRequestReceived(sender, logical_name, physical_addr); if(physical_addr != null && !initial_hosts.contains(physical_addr)) dynamic_hosts.addIfAbsent(physical_addr); }
public void destroy() { stubManager.destroyStubs(); super.destroy(); }
group_addr=(String)evt.getArg(); Object ret=down_prot.down(evt); handleConnect(); return ret; handleDisconnect(); return down_prot.down(evt);
@ManagedOperation(description="Reads logical-physical address mappings and logical name mappings from a " + "file (or URL) and adds them to the local caches") public void addToCache(String filename) throws Exception { InputStream in=ConfiguratorFactory.getConfigStream(filename); List<PingData> list=read(in); if(list != null) for(PingData data: list) addDiscoveryResponseToCaches(data.getAddress(), data.getLogicalName(), data.getPhysicalAddr()); }
protected void write(List<PingData> list, OutputStream out) throws Exception { try { for(PingData data: list) { String logical_name=data.getLogicalName(); Address addr=data.getAddress(); PhysicalAddress phys_addr=data.getPhysicalAddr(); if(logical_name == null || addr == null || phys_addr == null) continue; out.write(logical_name.getBytes()); out.write(WHITESPACE); out.write(addressAsString(addr).getBytes()); out.write(WHITESPACE); out.write(phys_addr.toString().getBytes()); out.write(WHITESPACE); out.write(data.isCoord()? String.format("T%n").getBytes() : String.format("F%n").getBytes()); } } finally { Util.close(out); } }
switch(evt.getType()) { case Event.FIND_INITIAL_MBRS: // sent by GMS layer return findMembers(null, true, false); // triggered by JOIN process (ClientGmsImpl) return findMembers(evt.getArg(), false, false); // triggered by MERGE3 return findMembers(null, false, false); // triggered by MERGE3 is_coord=current_coord != null && local_addr != null && current_coord.equals(local_addr); Object retval=down_prot.down(evt); if(send_cache_on_join && !isDynamic() && is_coord) { 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); startCacheDissemination(curr_mbrs, left_mbrs, new_mbrs); // separate task cluster_name=evt.getArg(); Object ret=down_prot.down(evt); handleConnect(); return ret; handleDisconnect(); return down_prot.down(evt);
protected boolean addDiscoveryResponseToCaches(Address mbr, String logical_name, PhysicalAddress physical_addr) { if(mbr == null) return false; if(logical_name != null) NameCache.add(mbr, logical_name); if(physical_addr != null) return (Boolean)down(new Event(Event.ADD_PHYSICAL_ADDRESS, new Tuple<>(mbr, physical_addr))); return false; }
public void discoveryRequestReceived(Address sender, String logical_name, PhysicalAddress physical_addr) { super.discoveryRequestReceived(sender, logical_name, physical_addr); if(physical_addr != null && !initial_hosts.contains(physical_addr)) dynamic_hosts.addIfAbsent(physical_addr); }
@Override public void destroy() { client=null; super.destroy(); }
protected void handleDiscoveryResponse(PingData data, Address sender) { // add physical address (if available) to transport's cache Address logical_addr=data.getAddress() != null? data.getAddress() : sender; addDiscoveryResponseToCaches(logical_addr, data.getLogicalName(), data.getPhysicalAddr()); boolean overwrite=Objects.equals(logical_addr, sender); addResponse(data, overwrite); }
@ManagedOperation(description="Reads logical-physical address mappings and logical name mappings from a " + "file (or URL) and adds them to the local caches") public void addToCache(String filename) throws Exception { InputStream in=ConfiguratorFactory.getConfigStream(filename); List<PingData> list=read(in); if(list != null) for(PingData data: list) addDiscoveryResponseToCaches(data.getAddress(), data.getLogicalName(), data.getPhysicalAddr()); }
protected void findMembers(List<Address> members, boolean initial_discovery, Responses rsps, boolean async) { for(Discovery discovery_protocol: discovery_protocols) { discovery_protocol.addResponse(rsps); if(async || async_discovery) timer.execute(() -> discovery_protocol.findMembers(members, initial_discovery, rsps)); else discovery_protocol.findMembers(members, initial_discovery, rsps); } }