On 30/01/2009, at 5:17 PM, Chris Anderson wrote:

On Thu, Jan 29, 2009 at 9:23 PM, Antony Blakey <[email protected] > wrote:

On 30/01/2009, at 9:49 AM, Chris Anderson wrote:

What's happening in this scenario is that B is not getting any revs
from A. Replication is one-way. I think if you always trigger
replication both ways, then your nodes will be consistent (assuming
they accept the same set of updates as valid).

If you have > 2 nodes then that is no longer true. Consider three nodes A, B
and C where

A: has a validation function F
B: a document that is invalid under F

Replicating B -> C, A -> C is different than A -> C, B -> C, and there is no
global steady state that can be reached.

I think it is the responsibility of the application to write sane
validation functions. Also, I don't see how the order of incoming
replications to C matters. Maybe you can spell it out for me.

B -> C : the document, invalid under F is replicated to C
A -> C : the validation function is replicated to C

At this point, C has the document that would have failed F, and the validation function

If we do it in a different order, then:

A -> C : the validation function is replicated to C
B -> C : the document, invalid under F is replicated to C, but isn't accepted because it is invalid

At this point, C has the validation function, but not the document that has failed

Extending this to update functions means that conflict resolution is no longer globally deterministic, because it depends on the propagation pattern of the update function. Same with validation and authentication.

This will only affect some use cases, but it's a very difficult problem in meshes.

Antony Blakey
-------------
CTO, Linkuistics Pty Ltd
Ph: 0438 840 787

In anything at all, perfection is finally attained not when there is no longer anything to add, but when there is no longer anything to take away.
  -- Antoine de Saint-Exupery


Reply via email to