incubator-couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Damien Katz <dam...@apache.org>
Subject Re: all_or_nothing=true and replication
Date Sun, 01 Nov 2009 22:36:18 GMT

On Nov 1, 2009, at 5:07 PM, Brian Candler wrote:

> At http://wiki.apache.org/couchdb/HTTP_Bulk_Document_API I see the
> following:
>
> "Bulk updates work independently of replication, meaning document  
> revisions
> originally saved as part of an all or nothing transaction will be  
> replicated
> individually, not as part of a bulk transaction. This means other  
> replica
> instances may only have a subset of the transaction, and if an  
> update is
> rejected by the remote node during replication (e.g. not authorized  
> error)
> the remote node may never have the complete transaction."
>
> I had a vague idea from the original discussions that these  
> transactions
> would remain together, but this appears to be wrong.
>
> I'd just like to ask if the lack of boundaries for replication is
> intentional behaviour, or just an artefact of the current  
> implementation
> which might change?

It's intentional behavior. Documents are meant to be independent, even  
conflicts..

>
> I can think of circumstances where it might be useful to keep them  
> together.
> Consider, for example, an all_or_nothing transaction which is used to
> resolve a conflict between three documents: it does this by writing  
> a new
> revision, and deleting the other two revisions.
>
> If this set of updates became split upon replication, it might end up
> deleting the two old revisions but not updating the other document;  
> thus you
> would have lost data from those two revisions.
> Any thoughts or comments?

Yes, you can make a situation where somehow a user has legal updates  
to certain conflicts, but not others, on a particular node A. On some  
other node B, somehow the security was different and he was allowed to  
update all the docs. Then an attempt to merge all the conflicts into  
the document the user didn't really have edit access too will not be  
replicated from node B to node A.

It's a contrived situation, but possible with misconfigured or updated  
security settings that haven't propagated.

However, if you doing this as a VCS where you keep all the diffs, then  
simply put the edit history as diffs into even the deleted documents.  
Deleted docs actually can have a body and attachments, for just this  
reason. Then no data is lost even when weird security settings  
disallow only certain replicated edits.

-Damien

>
> Regards,
>
> Brian.


Mime
View raw message