[infinispan-dev] DeltaAware: different local/remote behaviour

Radim Vansa rvansa at redhat.com
Tue Dec 2 09:33:21 EST 2014


Hi,

I was trying to implement an effective atomic counters [1] in Infinispan 
using the DeltaAware interface, but trying to use DeltaAware I've 
spotted an unexpected behaviour; I wanted to have a Delta for 
getAndIncrement() method, that would simply increment the value without 
knowing the previous value ahead, and return this previous value. 
Therefore, I was inserting a fake DeltaAware object into the cache that 
generates this relative Delta.

This works as long as the originator != primary owner, as the delta is 
generated during marshalling. However, if I store that object locally, 
the fake object is not used to generate the delta and reapply it on 
current instance in data container, but it is stored directly.

Is such difference in local/remote behaviour bug or feature? (this is 
the main question in this mail)

It seems to me that there are two reasons to use deltas: reducing size 
of RPCs and reduce their total number. So the design should optimize both.

I have another doubts about DeltaAware interface usefulness, tracked in 
ISPN-5035 [2] - while it reduces bandwith from originator to primary 
owner, the response from primary owner to originator carries the full 
value. I also find quite inconvenient that only PutKeyValueCommand 
somehow works with deltas, but ReplaceCommand does not.

I've also noticed that the backup carries the full value [3], not quite 
a good idea when we're trying to reduce bandwith.

Generally, I think that EntryProcessor-like interface would be more 
useful than DeltaAware.

Radim

[1] https://github.com/rvansa/infinispan/tree/t_objects
[2] https://issues.jboss.org/browse/ISPN-5035
[3] https://issues.jboss.org/browse/ISPN-5037

-- 
Radim Vansa <rvansa at redhat.com>
JBoss DataGrid QA



More information about the infinispan-dev mailing list