[infinispan-dev] mux usage
Ales Justin
ales.justin at gmail.com
Tue May 15 17:25:19 EDT 2012
Ha, I was right. ;-)
Adding this code:
MessageListenerToRequestHandlerAdapter adapter = new MessageListenerToRequestHandlerAdapter(wrapper);
MessageDispatcher dispatcher = new MuxMessageDispatcher(muxId, channel, wrapper, listener, adapter);
does the job -- listener gets invoked now.
So, the question is, JGroups bug, or intentional?
-Ales
On May 15, 2012, at 11:13 PM, Ales Justin wrote:
>>
>> public Object up(Event evt) {
>> if(corr != null) {
>> if(!corr.receive(evt)) {
>> try {
>> return handleUpEvent(evt);
>>
>> Meaning msg listener only get's hit if corr::receive returns false.
>> Is this the case ever - with Ispans handles in place - here?
>
> I think it managed to see why no listener kicks in -- if my debug was right.
> And the above code -- as suspected -- is the culprit.
>
> corr.receive invokes
>
> case Event.MSG:
> if(receiveMessage((Message)evt.getArg()))
> return true; // message was consumed, don't pass it up
>
> Where "receiveMessage" goes here:
>
> switch(hdr.type) {
> case Header.REQ:
> if(request_handler == null) {
> if(log.isWarnEnabled()) {
> log.warn("there is no request handler installed to deliver request !");
> }
> return true;
> }
>
> handleRequest(msg, hdr); <----------------------- HERE
> break;
>
> ..... // other code
>
> return true; // message was consumed
>
> ----
>
> Our Msg dispatcher is the request_handler,
> but since we don't setup any explicit hander on it, it does nothing, retval == null.
>
> And then
>
> if(!hdr.rsp_expected) // asynchronous call, we don't need to send a response; terminate call here
> return;
>
> is true, since I put back async usage, so we return nicely.
>
> If you go back "receiveMessage" on ReqCorr returns true, hence we think msg was properly consumed,
> so no need for listener to handle it.
>
> Bug in JGroups?
>
> ---
>
> protected void handleRequest(Message req, Header hdr) {
> Object retval;
> Object rsp_buf; // either byte[] or Buffer
> Header rsp_hdr;
> Message rsp;
> boolean threw_exception=false;
>
> // i. Get the request correlator header from the msg and pass it to
> // the registered handler
> //
> // ii. If a reply is expected, pack the return value from the request
> // handler to a reply msg and send it back. The reply msg has the same
> // ID as the request and the name of the sender request correlator
>
> if(log.isTraceEnabled()) {
> log.trace(new StringBuilder("calling (").append((request_handler != null? request_handler.getClass().getName() : "null")).
> append(") with request ").append(hdr.id));
> }
>
> try {
> retval=request_handler.handle(req);
> }
> catch(Throwable t) {
> // if(log.isErrorEnabled()) log.error("error invoking method", t);
> threw_exception=true;
> retval=t;
> }
>
> if(!hdr.rsp_expected) // asynchronous call, we don't need to send a response; terminate call here
> return;
>
More information about the infinispan-dev
mailing list