[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