Interesting stuff Manik, thanks for the updates. Actually, on our side 
we've also been working on adding versioning to ISPN during the summer.  
However, in our case we are aiming at achieving serializability avoiding 
global synchronization points (so we're actually keeping chains of 
versions per each key, not just the most recent one).

Maria and Pedro next week will give an overview of the solution we're 
working on at the Lisbon meeting. If you've already some versions of the 
code, may be we could already start looking at it, in order to avoid 
taking decisions that will make it excessively painful to merge the code 
in future.

About the two options you're mentioning. I'd go definitely for 2).

Concerning costs. For option 2), the prepare message should piggyback 
the version identifiers of *each* data item that needs to be write-skew 
checked...which may lead to big messages, if you needed to test a lot of 
data items. But the ws-check is done only on the data items that are 
both read and written within the same xact. So I'd expect that normally 
just a few keys would need to be write-skew checked (at least this would 
be the case for the wide majority of DBMS/STM benchmarks I've been using 
so far).  Therefore I would not be too concerned with this issue.

Cheers

     Paolo

On 9/14/11 3:03 PM, Manik Surtani wrote:
> So I've been hacking on versioned entries for a bit now, and want to run the 
> designs by everyone. Adding an EntryVersion to each entry is easy, making 
> this optional and null by default easy too, and a SimpleVersion a wrapper 
> around a long and a PartitionTolerantVersion being a vector clock 
> implementation.  Also easy stuff, changing the entry hierarchy and the 
> marshalling to ensure versions - if available - are shipped, etc.
>
> Comparing versions would happen in Mircea's optimistic locking code, on 
> prepare, when a write skew check is done.  If running in a non-clustered 
> environment, the simple object-identity check we currently have is enough; 
> otherwise an EntryVersion.compare() will need to happen, with one of 4 
> possible results: equal, newer than, older than, or concurrently modified.  
> The last one can only happen if you have a PartitionTolerantVersion, and will 
> indicate a split brain and simultaneous update.
>
> Now the hard part.  Who increments the version?  We have a few options, all 
> seem expensive.
>
> 1) The modifying node.  If the modifying node is a data owner, then easy.  
> Otherwise the modifying node *has* to do a remote GET first (or at least a 
> GET_VERSION) before doing a PUT.  Extra RPC per entry.  Sucks.
>
> 2) The data owner.  This would have to happen on the primary data owner only, 
> and the primary data owner would need to perform the write skew check.  NOT 
> the modifying node.  The modifying node would also need to increment and ship 
> its own NodeClock along with the modification. Extra info to ship per commit.
>
> I'm guessing we go with #2, but would like to hear your thoughts.
>
> Cheers
> Manik
>
> --
> Manik Surtani
> ma...@jboss.org
> twitter.com/maniksurtani
>
> Lead, Infinispan
> http://www.infinispan.org
>
>
>
>
> _______________________________________________
> infinispan-dev mailing list
> infinispan-dev@lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/infinispan-dev

_______________________________________________
infinispan-dev mailing list
infinispan-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/infinispan-dev

Reply via email to