/** Marks all responses with an exception (unless a response was already marked as done) */ public void transportClosed() { boolean changed=false; lock.lock(); try { for(Map.Entry<Address, Rsp<T>> entry: rsps.entrySet()) { Rsp<T> rsp=entry.getValue(); if(rsp != null && !(rsp.wasReceived() || rsp.wasSuspected() || rsp.wasUnreachable())) { rsp.setException(new IllegalStateException("transport was closed")); num_received++; changed=true; } } if(changed && responsesComplete()) { complete(this.rsps); corrDone(); } } finally { lock.unlock(); } }
public RspList<T> join() { return doAndComplete(super::join); }
/** * Sends a message to all members and expects responses from members in dests (if non-null). * @param dests A list of group members from which to expect responses (if the call is blocking). * @param data The message to be sent * @param opts A set of options that govern the call. See {@link org.jgroups.blocks.RequestOptions} for details * @return RspList A list of Rsp elements, or null if the RPC is asynchronous * @throws Exception If the request cannot be sent * @since 2.9 */ public <T> RspList<T> castMessage(final Collection<Address> dests, Buffer data, RequestOptions opts) throws Exception { GroupRequest<T> req=cast(dests, data, opts, true); return req != null? req.getNow(null) : null; }
public void receiveResponse(Object response_value, Address sender, boolean is_exception) { Rsp<T> rsp; if(isDone() || (rsp=rsps.get(sender)) == null) return; if(responsesComplete() || (rsp_filter != null && !rsp_filter.needMoreResponses())) { complete(this.rsps); corrDone();
_req=new GroupRequest(msg, corr, real_dests, mode, timeout, 0); _req.setCaller(this.local_addr); try { _req.execute(use_anycasting); return _req.getResults();
GroupRequest<T> req=new GroupRequest<>(corr, real_dests, options); long start=non_blocking || !rpc_stats.extendedStats()? 0 : System.nanoTime(); req.execute(data, block_for_results); long time=non_blocking || !rpc_stats.extendedStats()? 0 : System.nanoTime() - start; if(!non_blocking)
req_id=getRequestId(); reset(null); // clear 'responses' array if(timeout <= 0) { while(true) { /* Wait for responses: */ adjustMembership(); // may not be necessary, just to make sure... if(responsesComplete()) { if(corr != null) { corr.done(req_id); log.trace("received all responses: " + toString()); long timeout_time=start_time + timeout; while(timeout > 0) { /* Wait for responses: */ if(responsesComplete()) { if(corr != null) corr.done(req_id); if(log.isTraceEnabled() && rsp_mode != GET_NONE) { log.trace("received all responses: " + toString());
return num_received + num_suspected >= num_total; case GET_MAJORITY: int majority=determineMajority(num_total); if(num_received + num_suspected >= majority) return true; break; case GET_ABS_MAJORITY: majority=determineMajority(num_total); if(num_received >= majority) return true; if(expected_mbrs >= num_total) { rsp_mode=GET_ALL; return responsesComplete();
public boolean getResponsesComplete() { lock.lock(); try { return responsesComplete(); } finally { lock.unlock(); } }
public boolean execute() throws Exception { return execute(false); }
public RspList<T> get() throws InterruptedException, ExecutionException { return waitForCompletion(); }
@GuardedBy("lock") protected boolean responsesComplete() { if(isDone()) return true; final int num_total=rsps.size(); switch(options.mode()) { case GET_FIRST: return num_valid >= 1 || num_received >= num_total; case GET_ALL: return num_valid >= num_total || num_received >= num_total; case GET_NONE: return true; } return false; }
protected void sendRequest(Buffer data, final Collection<Address> targetMembers) throws Exception { try { corr.sendRequest(targetMembers, data, options.mode() == ResponseMode.GET_NONE? null : this, options); } catch(Exception ex) { corrDone(); throw ex; } }
public void sendRequest(Buffer data) throws Exception { sendRequest(data, rsps.keySet()); }
public void receiveResponse(Object response_value, Address sender, boolean is_exception) { Rsp<T> rsp; if(isDone() || (rsp=rsps.get(sender)) == null) return; if(responsesComplete() || (rsp_filter != null && !rsp_filter.needMoreResponses())) { complete(this.rsps); corrDone();
_req=new GroupRequest(msg, corr, mbrs, mode, timeout, 0); _req.setCaller(local_addr); try { _req.execute(); rsp_list=_req.getResults();
GroupRequest<T> req=new GroupRequest<>(corr, real_dests, options); long start=non_blocking || !rpc_stats.extendedStats()? 0 : System.nanoTime(); req.execute(data, block_for_results); long time=non_blocking || !rpc_stats.extendedStats()? 0 : System.nanoTime() - start; if(!non_blocking)
public boolean getResponsesComplete() { lock.lock(); try { return responsesComplete(); } finally { lock.unlock(); } }