[infinispan-dev] Versioned entries - overview of design, looking for comments

Paolo Romano romano at inesc-id.pt
Sat Sep 17 07:16:01 EDT 2011


On 9/16/11 12:58 PM, Manik Surtani wrote:
>
> On 15 Sep 2011, at 15:41, Paolo Romano wrote:
>
>> Do you want to increase the value stored in the i-th entry of each 
>> data item updated by a committing transaction independently (i.e. 
>> data_item.VC[i]=data_item.VC[i]+1 instead of 
>> data_item.VC[i]=++Node_clock_at_i)?
>
> I think the latter should be sufficient.  As you say it means less 
> data on the wire, but also it scales better as you don't need to 
> maintain one counter per node per data item.  Can you think of why 
> this approach may fall short?
- with the latter approach, the ids of two subsequent versions of the 
same data item created by the same node can have "gaps" (non-consecutive 
version ids). Thus a node that had to reconcile two versions v', v'' of 
a data item created by node i, where v'[i]>v''[i]+1, would not be able 
to figure out if it missed just a single update of i, or more than one 
(although it could determine that v' is more recent than v''). I imagine 
this would not normally be an issue for reconciliation, but the 
reconciliation logic is ultimately highly application dependent, so it's 
hard to tell...

- version identifiers may run out more rapidly, so wrap-arounds could 
become more frequent. But the wrap-around issue should be addressed 
anyway... and even at high throughput, using longs to store version 
identifiers, this should still be a rare event (though I didn't do the 
math).

+ an other advantage of the latter solution is that it allows for 
temporally (total) ordering the versions of two *different* data items 
created/updated by the same node (by comparing the ids stored in the 
entry of the updating node). I guess that this information might be 
exploited in some reconciliation scenarios.

     P


More information about the infinispan-dev mailing list