On 1.12.11 14:25, Jukka Zitting wrote:
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.

This to me sounds like the best approach to take if only there's a way
to solve the problems you mention. The main benefit of an eventually
consistent model is that a save() call can safely return without the
repository having to synchronizes with other cluster nodes or
ultimately even other threads within a single node.

I think the toughest question here is how to merge conflicting commits. There are some quite pathological cases [1]: consider the case where a node x is moved such that it becomes a child of node y in one session and at them same time node y is moved such that it becomes a child of node x in another session. The situation is inherently symmetric and neither move can follow the other. On merge there seems to be no better way than to undo one (or both?) of the changes of the sessions.

Michael

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

Reply via email to