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; }
@SuppressWarnings("unchecked") @Override public Object up(Event evt) { switch (evt.getType()) { case Event.FIND_MBRS: List<Address> missing = (List<Address>) evt.getArg(); Responses responses = new Responses(false); for (Address laddr : missing) { try { if (laddr instanceof JGAddress) { PingData pd = new PingData(laddr, true, laddr.toString(), newIpAddress(laddr)); responses.addResponse(pd, false); updateUDPCache(pd); } } catch (RuntimeException e) { logger.warn("Unable to create PingData response", e); throw e; } } return responses; } return up_prot.up(evt); }
public Responses findMembers(List<Address> members, boolean initial_discovery, boolean async) { num_discovery_requests++; int num_expected=members != null? members.size() : 0; int capacity=members != null? members.size() : 16; final Responses rsps=new Responses(num_expected, initial_discovery && break_on_coord_rsp, capacity); findMembers(members, initial_discovery, rsps, async); return rsps; }
public Responses findMembers(final List<Address> members, final boolean initial_discovery, boolean async) { num_discovery_requests++; int num_expected=members != null? members.size() : 0; int capacity=members != null? members.size() : 16; final Responses rsps=new Responses(num_expected, initial_discovery && break_on_coord_rsp, capacity); synchronized(ping_responses) { ping_responses.put(System.nanoTime(), rsps); } if(async || async_discovery) timer.execute(() -> findMembers(members, initial_discovery, rsps)); else findMembers(members, initial_discovery, rsps); weedOutCompletedDiscoveryResponses(); return rsps; }
@SuppressWarnings("unchecked") @Override public Object up(Event evt) { switch (evt.getType()) { case Event.FIND_MBRS: List<Address> missing = (List<Address>)evt.getArg(); Responses responses = new Responses(false); for (Address laddr: missing) { try { if (laddr instanceof JGAddress) { PingData pd = new PingData(laddr, true, laddr.toString(), newIpAddress(laddr)); responses.addResponse(pd, false); updateUDPCache(pd); } } catch (RuntimeException e) { logger.warn("Unable to create PingData response", e); throw e; } } return responses; } return up_prot.up(evt); }