public Rsp(T retval) { setValue(retval); }
public RspList<T> addRsp(Address sender, T retval) { Rsp<T> rsp=get(sender); if(rsp != null) { rsp.setValue(retval); return this; } put(sender, new Rsp<>(retval)); return this; }
rsp.setException((Throwable)response_value); else rsp.setValue((T)response_value); num_valid++;
public Rsp(T retval) { setValue(retval); }
/** * <b>Callback</b> (called by RequestCorrelator or Transport). * Adds a response to the response table. When all responses have been received, * <code>execute()</code> returns. */ public void receiveResponse(Object response_value, Address sender) { if(done) { if(log.isWarnEnabled()) log.warn("command is done; cannot add response !"); return; } if(suspects.contains(sender)) { if(log.isWarnEnabled()) log.warn("received response from suspected member " + sender + "; discarding"); return; } synchronized(requests) { Rsp rsp=requests.get(sender); if(rsp != null) { if(rsp.wasReceived() == false) { rsp.setValue(response_value); rsp.setReceived(true); if(log.isTraceEnabled()) log.trace(new StringBuffer("received response for request ").append(req_id).append(", sender="). append(sender).append(", val=").append(response_value)); requests.notifyAll(); // wakes up execute() } } } }
/** * <b>Callback</b> (called by RequestCorrelator or Transport). * Report to <code>GroupRequest</code> that a member is reported as faulty (suspected). * This method would probably be called when getting a suspect message from a failure detector * (where available). It is used to exclude faulty members from the response list. */ public void suspect(Address suspected_member) { Rsp rsp; if(suspected_member == null) return; addSuspect(suspected_member); synchronized(requests) { rsp=requests.get(suspected_member); if(rsp != null) { rsp.setSuspected(true); rsp.setValue(null); requests.notifyAll(); } } }
/** * Adjusts the 'received' array in the following way: * <ul> * <li>if a member P in 'membership' is not in 'members', P's entry in the 'received' array * will be marked as SUSPECTED * <li>if P is 'suspected_mbr', then P's entry in the 'received' array will be marked * as SUSPECTED * </ul> * This call requires exclusive access to rsp_mutex (called by getResponses() which has * a the rsp_mutex locked, so this should not be a problem). */ private void adjustMembership() { if(requests.isEmpty()) return; Address mbr; Rsp rsp; synchronized(members) { for(Map.Entry<Address,Rsp> entry: requests.entrySet()) { mbr=entry.getKey(); if((!this.members.contains(mbr)) || suspects.contains(mbr)) { addSuspect(mbr); rsp=entry.getValue(); rsp.setValue(null); rsp.setSuspected(true); } } } }
/** * This method sets the <code>membership</code> variable to the value of * <code>members</code>. It requires that the caller already hold the * <code>rsp_mutex</code> lock. * @param mbrs The new list of members */ public final void reset(Vector<Address> mbrs) { if(mbrs != null) { synchronized(requests) { requests.clear(); for(Address mbr: mbrs) { requests.put(mbr, new Rsp(mbr)); } } // maintain local membership synchronized(this.members) { this.members.clear(); this.members.addAll(mbrs); } } else { synchronized(requests) { for(Rsp rsp: requests.values()) { rsp.setReceived(false); rsp.setValue(null); } } } }
rsp.setValue(null); rsp.setSuspected(true); modified=true;
public RspList<T> addRsp(Address sender, T retval) { Rsp<T> rsp=get(sender); if(rsp != null) { rsp.setValue(retval); return this; } put(sender, new Rsp<>(retval)); return this; }
entry.getValue().setValue(extended.getResponse());
rsp.setException((Throwable)response_value); else rsp.setValue((T)response_value); num_valid++;