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

Paul Joseph Davis commented on COUCHDB-3314:
--------------------------------------------

[~rnewson] This is described a bit better in COUCHDB-3315 (not sure why 
[~mayyas] opened two...) but this only affects creation. For instance, most 
people are aware that creating an empty document results in the revision 
`1-967a00dff...` which I'm sure most people recognize. This change is to make 
an option that allows a user to create a document and specify a bit of random 
data so that the initial 1-* revsions are random. If you specify the same 
"random" value on two different creations you still get the same revision.

Once the document is created all updates use the same old deterministic update 
logic we currently have.

For now the randomness will be opt-in and when we hit 3.0 the idea would be to 
flip it to the default. The single use case I know of that would be affected by 
this is when a user creates documents in different dbs, applies identical 
updates, and then expects replication to not introduce a conflict. With the 
initial revision being random that would no longer be true. However users with 
that particular use case could either specify the same "random" value (ie, 
0-000000000) to all document creations or user some other domain/app specific 
value to identify the created document.

> 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