On 1.12.11 13:01, Jukka Zitting wrote:
Hi,

On Thu, Dec 1, 2011 at 1:13 PM, Michael Dürig<[email protected]>  wrote:
But this will introduce a race condition. With other words: this only make
the time window during which such a inconsistency could slip in smaller. I
think what we'd really need is an atomic test and set operation.

Right, either the refresh-check-persist model for save() needs to be
atomic (possibly with optimistic locking as described) or we need an
eventual consistency model that can automatically resolve such
conflicts.

Has this already been thought about? How does the current microkernel
implementation handle such cases?

Currently the microkernel does nothing about this. That's what this whole discussion is about after all ;-)

Eventually consistent approaches are IMO very hard to get right with JCR since most operation are assumed to be persisted after dispatch. One solution I see is to have changes caused by conflict resolution (i.e. during convergence) to appear as normal changes as if they where done by other sessions (see [1]). This would however require changing the revision model of the microkernel from linear shaped to tree shaped.

For the current problem I'd rather have the microkernel to expose some test-and-set semantics as Tom describes in [2]. That way a client of the microkernel could apply changes atomically.

A third and most general solution which puts away with write skew for good is described in [3]. This requires examining the commit log for certain read-write conflicts on save.

Michael

[1] http://wiki.apache.org/jackrabbit/Clustering%20the%20Microkernel#Replication

[2] http://markmail.org/message/c32jpeoxklgcrybr

[3] http://dl.acm.org/citation.cfm?id=1376690

Reply via email to