[infinispan-dev] More thoughts on HotRod's ForceReturnPreviousValue

Mircea Markus mircea.markus at jboss.com
Thu Apr 1 20:06:50 EDT 2010


Sorry for the late answer.
I think It's simple for the client code to keep track of it the sent flags, as it currently happens.

On 30 Mar 2010, at 19:05, Galder Zamarreno wrote:

> See below:
> 
> On Mon, 29 Mar 2010 13:47:59 +0200, Manik Surtani <manik at jboss.org> wrote:
> 
>> 
>> On 26 Mar 2010, at 17:03, Galder Zamarreno wrote:
>> 
>>> Hi all,
>>> 
>>> I've been thinking further about ForceReturnPreviousValue flag in
>>> http://community.jboss.org/wiki/HotRodProtocol.
>>> 
>>> Currently, if no ForceReturnPreviousValue is passed, the responses for
>>> put, putIfAbsent, replace, replaceIfUmodified, remove and
>>> removeIfUmodified looks like this:
>>> 
>>> [header]
>>> 
>>> Now, if ForceReturnPreviousValue is passed, the idea is this: If
>>> ForceReturnPreviousValue has been passed, responses will contain  
>>> previous
>>> [value length][value] for that key. If the key does not exist or  
>>> previous
>>> was null, value length would be 0. Otherwise, if no
>>> ForceReturnPreviousValue was sent, the response would be empty.
>>> 
>>> However, as it is, this means that for a put, the response would be
>>> either, [header] or [header][value lenght][value]. So, in effect, the
>>> client decoder needs to know about the request itself to be able to
>>> determine whether it needs to read the value length or not. I wonder
>>> whether this could be imposing some restrictions on the client decoder.
>>> So, instead, I was wondering whether this might make more sense and make
>>> implementation of the client decoder easier.
>>> 
>>> put, putIfAbsent, replace, replaceIfUmodified, remove and
>>> removeIfUmodified responses looks like this:
>>> [header][value length]
>>> 
>>> *If no ForceReturnPreviousValue is sent, value length will always be 0*.
>>> If ForceReturnPreviousValue is passed and key was not present, or  
>>> previous
>>> value was null, value length is 0. Otherwise, value length will be non
>>> zero and value will follow.
>>> 
>>> The idea here is that these ops responses always return a value length,
>>> regardless of whether the flag is present or not. This, I think, would
>>> make client dcoders easier since they always know what they need to read
>>> and can pass it back without knowing which flags were passed on the
>>> request.
>>> 
>>> Thoughts?
>> 
>> Don't clients hold on to the message id when a message is sent, and  
>> shouldn't the response contain the same message id?  That should allow  
>> clients to decide whether to parse a return value or not.
> 
> Indeed they can do that.
> 
> I just thought having it always there would make decoding easier since  
> they can decode without needing to know about the request. After decoding,  
> you do need to match up the response accordingly and send it back to the  
> client. I've ended up implementing this as originally thought though.
> 
>> 
>> --
>> Manik Surtani
>> manik at jboss.org
>> Lead, Infinispan
>> Lead, JBoss Cache
>> http://www.infinispan.org
>> http://www.jbosscache.org
>> 
>> 
>> 
>> 
>> 
>> _______________________________________________
>> infinispan-dev mailing list
>> infinispan-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/infinispan-dev
> 
> 
> -- 
> Galder Zamarreño
> Sr. Software Engineer
> Infinispan, JBoss Cache
> 
> _______________________________________________
> infinispan-dev mailing list
> infinispan-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/infinispan-dev





More information about the infinispan-dev mailing list