[ 
https://issues.apache.org/jira/browse/COUCHDB-3314?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15904803#comment-15904803
 ] 

Robert Newson commented on COUCHDB-3314:
----------------------------------------

The deterministic revision change (many years ago) was motivated by a desire to 
optimise replication in the case that two (or more) couchdb servers saw the 
same document history independently. The revs would match, and the replicator 
would not bother sending the document from source to target. Prior to the 
deterministic revisions commit, couchdb generated a random value for _rev.

I'm not sure I understand the value of this middle case if, as I suspect, it 
breaks the reason we introduced deterministic revisions.


> Add an option in doc creation APIs to specify a random value for an initial 
> doc revision
> ----------------------------------------------------------------------------------------
>
>                 Key: COUCHDB-3314
>                 URL: https://issues.apache.org/jira/browse/COUCHDB-3314
>             Project: CouchDB
>          Issue Type: New Feature
>          Components: Database Core, HTTP Interface
>            Reporter: Mayya Sharipova
>
> Currently the initial revision of a document is deterministic. For instance,
> anyone that has created an empty document probably recognizes the revision 
> starting with "1-967a00dff...". In order to account for situations when a 
> document is continually purged and recreated we're going to add randomness to 
> this initial revision by specifying a 0-$rev in the request coordinator. We 
> will then include this in the revision generation but drop the 0-$rev entry 
> from the revision's path. 
> Thus, the new API will look like this:
> acurl -X PUT 
> https://http://adm:[email protected]:5984/test-db/newdoc1?rev=0-adfdafa123 -d 
> '{}'
> And similarly for _bulk_docs
> For a user who wants to create a doc, then purge it, and then re-create, it 
> is recommended to recreate it with another random revision. 
> It is important to note that the 0-$rev only affects document creation. Once
> a document exists, updates to the document will continue to update their hash 
> in the same deterministic fashion. Ie, once a document exists, identical
> updates will result in identical revisions.
> _________________
> The following changes need to be made in the code:
> 1.  API changes to allow to specify random rev in doc PUT requests, _bulk_docs
> 2. Internals: 
> 2.1 Use a new revision here: 
> https://github.com/apache/couchdb-couch/blob/master/src/couch_db.erl#L886 
> 2.2 Don't include provided 0-$rev entry to the revision's path (find wherever 
> new_revid is called from; could be 2-3 places)
> 2.3 Reject a 0-$rev during replication



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to