protected static RequestCorrelator createRequestCorrelator(Protocol transport, RequestHandler handler, Address local_addr) { return new RequestCorrelator(transport, handler, local_addr); }
protected void correlatorStarted() { if(corr != null) corr.setMarshaller(marshaller); }
protected void corrDone() { if(corr!=null && this.req_id > 0) corr.done(this.req_id); } }
/** * <b>Callback</b>. * <p> * Called by the protocol below when a message has been received. The algorithm should test whether the message * is destined for us and, if not, pass it up to the next layer. Otherwise, it should remove the header and check * whether the message is a request or response. * In the first case, the message will be delivered to the request handler registered * (calling its {@code handle()} method), in the second case, the corresponding response collector is looked up and * the message delivered. * @param evt The event to be received * @return Whether or not the event was consumed. If true, don't pass message up, else pass it up */ public boolean receive(Event evt) { switch(evt.getType()) { case Event.VIEW_CHANGE: // adjust number of responses to wait for receiveView(evt.getArg()); break; case Event.SET_LOCAL_ADDRESS: setLocalAddress(evt.getArg()); break; case Event.SITE_UNREACHABLE: SiteMaster site_master=evt.getArg(); String site=site_master.getSite(); setSiteUnreachable(site); break; // let others have a stab at this event, too } return false; }
protected void dispatch(final Message msg, final Header hdr) { switch(hdr.type) { case Header.REQ: handleRequest(msg, hdr); break; case Header.RSP: case Header.EXC_RSP: Request req=requests.get(hdr.req_id); if(req != null) handleResponse(req, msg.src(), msg.getRawBuffer(), msg.getOffset(), msg.getLength(), hdr.type == Header.EXC_RSP); break; default: log.error(Util.getMessage("HeaderSTypeIsNeitherREQNorRSP")); break; } }
@SuppressWarnings("resource") public ChannelCommandDispatcherFactory(ChannelCommandDispatcherFactoryConfiguration config) { this.marshallingContext = config.getMarshallingContext(); this.timeout = config.getTimeout(); JChannel channel = config.getChannel(); RequestCorrelator correlator = new RequestCorrelator(channel.getProtocolStack(), this, channel.getAddress()).setMarshaller(new CommandResponseMarshaller(config)); this.dispatcher = new MessageDispatcher() .setChannel(channel) .setRequestHandler(this) .setMembershipListener(this) .asyncDispatching(true) // Setting the request correlator starts the dispatcher .correlator(correlator) ; this.view.compareAndSet(null, channel.getView()); }
receiveSuspect((Address)evt.getArg()); break; receiveView((View)evt.getArg()); break; setLocalAddress((Address)evt.getArg()); break; if(receiveMessage((Message)evt.getArg())) return true; // message was consumed, don't pass it up break;
public final void start() { if(corr == null) { if(transport_adapter != null) { corr=new RequestCorrelator("MessageDispatcher", transport_adapter, this, deadlock_detection, local_addr, concurrent_processing); } else { corr=new RequestCorrelator("MessageDispatcher", prot_adapter, this, deadlock_detection, local_addr, concurrent_processing); } } correlatorStarted(); corr.start(); if(channel != null) { Vector tmp_mbrs=channel.getView() != null ? channel.getView().getMembers() : null; setMembers(tmp_mbrs); } }
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; } }
if(corr != null) { List<Address> tmp=new Vector<Address>(members); corr.sendRequest(req_id, tmp, request_msg, rsp_mode == GET_NONE? null : this, use_anycasting); corr.done(req_id); throw ex; corr.done(req_id); if(responsesComplete()) { if(corr != null) corr.done(req_id); if(log.isTraceEnabled() && rsp_mode != GET_NONE) { log.trace("received all responses: " + toString()); corr.done(req_id);
public Object up(Message msg) { if(corr != null) corr.receiveMessage(msg); return null; }
/** * Used to signal that a certain request may be garbage collected as all responses have been received. */ public void done(long id) { removeEntry(id); }
/** * Called by channel (we registered before) when event is received. This is the UpHandler interface. */ @Override public Object up(Event evt) { if(corr != null && !corr.receive(evt)) { try { return handleUpEvent(evt); } catch(Throwable t) { throw new RuntimeException(t); } } return null; }
public void viewAccepted(View v) { if(corr != null) { corr.receiveView(v); } Vector new_mbrs=v.getMembers(); setMembers(new_mbrs); if(membership_listener != null) { membership_listener.viewAccepted(v); } }
handleRequest(msg, hdr); break;
@SuppressWarnings("resource") public ChannelCommandDispatcherFactory(ChannelCommandDispatcherFactoryConfiguration config) { this.marshallingContext = config.getMarshallingContext(); this.timeout = config.getTimeout(); JChannel channel = config.getChannel(); RequestCorrelator correlator = new RequestCorrelator(channel.getProtocolStack(), this, channel.getAddress()).setMarshaller(new CommandResponseMarshaller(config)); this.dispatcher = new MessageDispatcher() .setChannel(channel) .setRequestHandler(this) .setMembershipListener(this) .asyncDispatching(true) // Setting the request correlator starts the dispatcher .correlator(correlator) ; this.view.compareAndSet(null, channel.getView()); }
/** * <b>Callback</b>. * <p> * Called by the protocol below when a message has been received. The algorithm should test whether the message * is destined for us and, if not, pass it up to the next layer. Otherwise, it should remove the header and check * whether the message is a request or response. * In the first case, the message will be delivered to the request handler registered * (calling its {@code handle()} method), in the second case, the corresponding response collector is looked up and * the message delivered. * @param evt The event to be received * @return Whether or not the event was consumed. If true, don't pass message up, else pass it up */ public boolean receive(Event evt) { switch(evt.getType()) { case Event.VIEW_CHANGE: // adjust number of responses to wait for receiveView(evt.getArg()); break; case Event.SET_LOCAL_ADDRESS: setLocalAddress(evt.getArg()); break; case Event.SITE_UNREACHABLE: SiteMaster site_master=evt.getArg(); String site=site_master.getSite(); setSiteUnreachable(site); break; // let others have a stab at this event, too } return false; }
corr.sendRequest(real_dests, data, null, options); return null;
protected void dispatch(final Message msg, final Header hdr) { switch(hdr.type) { case Header.REQ: handleRequest(msg, hdr); break; case Header.RSP: case Header.EXC_RSP: Request req=requests.get(hdr.req_id); if(req != null) handleResponse(req, msg.src(), msg.getRawBuffer(), msg.getOffset(), msg.getLength(), hdr.type == Header.EXC_RSP); break; default: log.error(Util.getMessage("HeaderSTypeIsNeitherREQNorRSP")); break; } }
public Object up(Message msg) { if(corr != null) corr.receiveMessage(msg); return null; }