You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@couchdb.apache.org by "Benjamin Bastian (JIRA)" <ji...@apache.org> on 2014/04/08 00:00:18 UTC

[jira] [Updated] (COUCHDB-1415) Re-insering a document silently fails after compact is executed

     [ https://issues.apache.org/jira/browse/COUCHDB-1415?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Benjamin Bastian updated COUCHDB-1415:
--------------------------------------

    Attachment: patch

FWIW this problem has been fixed in Cloudant's fork of CouchDB, dbcore. I haven't looked at how difficult it'd be to port the patch to Apache CouchDB, but Bob Newson took a look and thought it'd be non-trivial.

The diff for the relevant changes in dbcore are attached.

> Re-insering a document silently fails after compact is executed
> ---------------------------------------------------------------
>
>                 Key: COUCHDB-1415
>                 URL: https://issues.apache.org/jira/browse/COUCHDB-1415
>             Project: CouchDB
>          Issue Type: Bug
>          Components: Database Core
>    Affects Versions: 1.1.1
>         Environment: Tested on multiple linux platforms
>            Reporter: Viktor Szabo
>            Assignee: Paul Joseph Davis
>         Attachments: patch
>
>
> When a document is re-inserted after a compact operation using the same contents it was originally created, the insert operation is silently ignored, leaving the client unaware of the fact it's document is not available in the database.
> Can be reproduced using the following sequence of steps:
> alias curl='curl -H "Content-Type: application/json"'
> url="http://localhost:5984/database"
> 1 curl -X PUT $url
> 2 curl -X POST $url -d '{"_id": "bug", "key": "value"}'
> 3 curl -X DELETE "$url/bug?rev=1-59414e77c768bc202142ac82c2f129de"
> 4 curl -X POST "$url/_compact"
> 5 curl -X POST $url -d '{"_id": "bug", "key": "value"}'
> 6 curl -X GET "$url/bug"
>   (bug here)
> 1 {"ok":true}
>   201
> 2 [{"ok":true,"id":"bug","rev":"1-59414e77c768bc202142ac82c2f129de"}]
>   201
> 3 {"ok":true,"id":"bug","rev":"2-9b2e3bcc3752a3a952a3570b2ed4d27e"}
>   200
> 4 {"ok":true}
>   202
> 5 [{"ok":true,"id":"bug","rev":"1-59414e77c768bc202142ac82c2f129de"}]
>   201
> 6 {"error":"not_found","reason":"deleted"}
>   404
> CouchDB shouldn't report "ok" on step 5 and then go on to claim that the doc is deleted. Also, it seems to work on second try:
> 7 curl -X POST $url -d '{"_id": "bug", "key": "value"}'
> 8 curl -X GET "$url/bug"
> 7 {"ok":true,"id":"bug","rev":"3-674f864b73df1c80925e48436e21d550"}
>   201
> 8 {"_id":"bug","_rev":"3-674f864b73df1c80925e48436e21d550","key":"value"}
>   200



--
This message was sent by Atlassian JIRA
(v6.2#6252)