[jbosscache-dev] RE: [javagroups-users] Possible speedup of void RPC response

Bela Ban bela at jboss.org
Tue Aug 29 12:42:25 EDT 2006


Okay. So for the future, an implementation similar to what 
Util.object{To,From}ByteBuffer() does might be an improvement.
I've applied some of your patch (didn't change RequestCorrelator), 
please check it out and test your unit tests.

I'll release a CR2 as soon as I have a first implementation of MergeView 
handling for the Multiplexer. Note that I fixed a bunch of bugs in the 
Multiplexer, so it's probably a good idea to cut a CR2 and let the code 
sit there and be tested for another week before we release 2.4 final.

Brian Stansberry wrote:
> (Moving to this list a thread related to a new 2.4 feature for using a
> JGroups Marshaller for marshalling RPC responses as well as requests.)
>
> Bela Ban wrote:
>   
>> Brian Stansberry wrote:
>>     
>>> I haven't had a chance to do the CPU profile, but did run the AS
>>> testsuite. 
>>>
>>> Using the registered Marshaller for return marshalling leads to all
>>> sorts of problems; the specialized marshallers in JBoss Cache weren't
>>> designed to marshal responses, so all hell breaks loose. A ton of
>>> session replication test cases fail.
>>>       
>> What do you mean by "were not designed" ?  Is there a chance
>> we can make it work rather than introducing the kludge below ?
>>
>>     
>
> The JBC marshallers were written assuming all they had to do was
> marshal/unmarshal a MethodCall, which is all that was required before. I
> haven't looked in detail, but wouldn't be surprised if there are casts
> to MethodCall.  Beyond just failing, if region-based marshalling is in
> effect, using it for responses would be very inefficient.  If
> region-based marshalling is in effect, the marshaller writes the Fqn
> string at the start of the stream so it can be parsed out by the
> unmarshaller and used to check if the region is active and if the call
> should be made. If the call isn't region-specific (e.g. a call used for
> buddy group formation), "NULL" is written.  So, if we used the current
> marshaller for a response, the string "NULL" would be written for every
> void response.
>
> These things can be fixed going forward, but the kludge was needed to
> make 2.4 usable with existing releases of JBoss Cache.
>
>   
>> Besides, don't you have classloader problems when JGroups
>> (rather than the Marshaller) unmarshalls values ? Because, by default,
>> Util.objectFromByteBuffer() simply uses the system classloader !
>>
>>     
>
> The only objects ever included in a response are JBC exceptions.  This
> *would* be a problem if JBC were loaded by a different classloader than
> JGroups.  I've never heard any complaint about this, so I guess people
> don't configure it that way (JBoss AS certainly doesn't.)
>
>   
>>> How about adding a property
>>> RpcDispatcher.setResponseMarshaller(Marshaller m)? If set, the
>>> Marshaller gets passed through to RequestCorrelator. If not, the old
>>> behavior remains, which is backward compatible.
>>>
>>> I've attached a patch that does that. With this in place, the
>>> failing tests all pass again. 
>>>
>>> Having the ability to marshal responses would definitely be a good
>>> thing for the JBoss HAPartition. For JBC, your optimized Util method
>>> should be fine, as all that's ever returned is null or an exception
>>>       
>> Okay, I'll apply this patch, but could you please create a
>> JIRA issue to look into using the same Marshaller that's used
>> for incoming requests ?
>>     
>
> Thanks. JIRAs are http://jira.jboss.com/jira/browse/JBCACHE-752 and
> http://jira.jboss.com/jira/browse/JBAS-3583 .
>
> _______________________________________________
> jbosscache-dev mailing list
> jbosscache-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/jbosscache-dev
>
>   

-- 
Bela Ban
Lead JGroups / Manager JBoss Clustering Group
JBoss - a division of Red Hat




More information about the jbosscache-dev mailing list