Steven Schaefer created COUCHDB-2886:
----------------------------------------

             Summary: Concurrent Bulk Updates and Attachments yield Corruption 
                 Key: COUCHDB-2886
                 URL: https://issues.apache.org/jira/browse/COUCHDB-2886
             Project: CouchDB
          Issue Type: Bug
            Reporter: Steven Schaefer


I work for Nexidia, and we're evaluating CouchDB for a new system we're 
developing. I was running some tests and in general trying to push it as hard 
as I could to help gain experience and set expectations, and I've encountered 
what appears to be a database corruption issue, when conflicting concurrent 
batch updates include attachments. I noticed results from one of my views made 
no sense, and after verifying it was up-to-date, tried running view compaction 
in an attempt to address that problem. It errored with this:
{quote}
    [info] [<0.24269.24>] Compaction started for db: bug idx: _design/dev
    [info] [<0.24224.24>] 127.0.0.1 - - POST /bug/_compact/dev 202
    [error] [<0.24269.24>] Duplicate docid `9255f05ad2939b5c487209321c000c79` 
detected in view group `_design/dev`, database `bug` - This view needs to be 
rebuilt.
    [error] [<0.24251.24>] ** Generic server <0.24251.24> terminating 
    ** Last message in was {'EXIT',<0.24269.24>,
                               {view_duplicate_id,
                                   <<"9255f05ad2939b5c487209321c000c79">>}}
    ** When Server state == {st,<0.24244.24>,couch_mrview_index,<0.24269.24>}
    ** Reason for termination == 
    ** unknown_info
{quote}
Deleting and then rebuilding the view didn't help, after which view results 
were still incorrect, and re-running view compaction produced the same error, 
which suggests to me a more fundamental issue.

I narrowed it down to a combination of concurrent bulk updates with 
attachments, or at least I should say I can consistently reproduce when 
including attachments, but I could never reproduce without them. I have 
attached a smallish example that usually reproduces the issue on my system.

Notes for running:
* Depends on Java 8 and if compiling I set this up to use maven
* Program will create "bug" database in a Couch instance running at 
localhost:5984. An existing "bug" db will be deleted.
* Some variables may need to be altered depending on system specs, look for 
"NOTE:" in the code. Rebuilding should be as easy as (assuming maven is 
installed) running from wherever unzipped: mvn install
* run-test.bat provides the command to run it. Only adjusting the -cp parameter 
should be necessary for Linux (i.e. ';' --> ':' )
* Should run fairly quickly, after which "Bug reproduced" should be visible in 
the console, and the Couch log will have an error like above.

System Notes:

* Windows 7
* 2x Intel Xeon E5-2687W v3 @ 3.10 GHz - 10 cores + hyperthreading (40 logical 
processors)
* 32 GB ram (NUMA)
* CouchDB configuration is default except for db and view storage locations.
* CouchDB 1.6.1




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to