[
https://issues.apache.org/jira/browse/COUCHDB-2774?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14695294#comment-14695294
]
Alexander Shorin commented on COUCHDB-2774:
-------------------------------------------
I found this new behavior is a fix, but a bug. Bug was that COPY could be used
to replicate exact one document, not to copy it content over some else doc.
> COPY request create a target document with a different revision hash
> --------------------------------------------------------------------
>
> Key: COUCHDB-2774
> URL: https://issues.apache.org/jira/browse/COUCHDB-2774
> Project: CouchDB
> Issue Type: Bug
> Security Level: public(Regular issues)
> Components: Database Core
> Reporter: Mike Wallace
>
> HTTP COPY requests create an identical copy of the source document. As the
> body of the target is unchanged the revision hash should also be unchanged,
> however that is not currently the case:
> $ URL=http://localhost:15984
> $ curl -X PUT $URL/doge
> {"ok":true}
> $ curl -X PUT $URL/doge/shibe1 -d '{"such doge":"very doc"}'
> {"ok":true,"id":"shibe1","rev":"1-6429670183877c94fed5cc7996cd880a"}
> $ curl -X COPY $URL/doge/shibe1 -H 'Destination: shibe2'
> {"ok":true,"ok":true,"id":"shibe2","rev":"1-c73d863c32ec87653923959eae56920b"}
> $ curl -X GET $URL/doge/shibe2
> {"_id":"shibe2","_rev":"1-c73d863c32ec87653923959eae56920b","such doge":"very
> doc"}
> The reason for the difference is because the document opened in the copy
> handler has a binary body [1]. When the revision hash is generated on update
> the binary is passed into couch_db:new_revid/1 and hence the hash is
> different. If we change the binary body to an ejson body and save the doc
> then the revision hash is the same [2].
> There are two possible solutions. One is to add a clause to
> couch_db:new_revid/1 which converts any binary doc bodies to ejson [3], the
> alternative is to open the doc with the ejson_body option in the chttpd_db
> handler fun.
> I prefer the second approach, using ejson_body to open the doc in chttpd_db,
> since it is simpler and further up the stack, so less likely to have any
> unfortunate side-effects.
> Unless anyone comments to the contrary I'll PR the second option.
> [1]
> https://github.com/apache/couchdb-chttpd/blob/master/src/chttpd_db.erl#L774
> [2] https://gist.github.com/mikewallace1979/592b65b2e51ca5f9a1a7
> [3]
> https://github.com/apache/couchdb-couch/commit/2b44b8d6eb865e24e05866e7aa8dd57d076a01d6
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)