couchdb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Wout Mertens <wmert...@cisco.com>
Subject Re: server crash when compacting empty database
Date Wed, 25 Mar 2009 11:25:02 GMT
Confirmed.

However, here's a related one: net-couchdb's compacting test makes  
CouchDB crash as well.

I don't have time right now to make a minimal test case, but this is  
the code:
========================
# insert a few documents and delete one
my $bacon   = $couch->insert( { b => 'bacon' } );

# test the asynchronous API
{
     $bacon->delete;
     my $starting_size = $couch->disk_size;
     $couch->compact({ async => 1 });
     sleep 1 while $couch->is_compacting;
     my $ending_size = 1||$couch->disk_size;
     cmp_ok( $starting_size, '>', $ending_size, 'async: size  
reduction' );
}
========================

So what happens is:
1. create new db
2. insert document
3. delete document
4. compact, asynchronously
5. keep asking for status
6. Couch crashes when the compact is done and on the next status request


Is this a 0.9.0 blocker?

Wout.

On Mar 25, 2009, at 12:58 AM, Jan Lehnardt wrote:

>
> On 25 Mar 2009, at 00:08, Jan Lehnardt wrote:
>
>> Hi Wout,
>>
>> good find! I'd say it is an API misuse at this point, but of course,
>> CouchDB should handle this more gracefully.
>>
>> The patch below fixes the problem fairly high up in the db_updater
>> module. The actual fix might has to go into the start_copy_compact/1
>> function, but I'd rather leave this for Damien.
>>
>> Also, this is not a blocker for 0.9 :)
>>
>> Wout, if this is still open tomorrow, can you file a bug?
>
> fixed as of r 758093
>
> Cheers
> Jan
> --
>
>>
>> Cheers
>> Jan
>> --
>>
>> Index: /Users/jan/Work/couchdb/trunk/src/couchdb/couch_db_updater.erl
>> ===================================================================
>> --- /Users/jan/Work/couchdb/trunk/src/couchdb/couch_db_updater.erl	 
>> (revision 757850)
>> +++ /Users/jan/Work/couchdb/trunk/src/couchdb/couch_db_updater.erl	 
>> (working copy)
>> @@ -139,6 +139,9 @@
>>    {reply, {ok, Db2#db.update_seq, IdRevsPurged}, Db2}.
>>
>>
>> +handle_cast(start_compact, #db{update_seq=Seq}=Db) when Seq =:= 0 ->
>> +    % do not attemt to compact empty dbs
>> +    {noreply, Db};
>> handle_cast(start_compact, Db) ->
>>    case Db#db.compactor_pid of
>>    nil ->
>>
>>
>> On 24 Mar 2009, at 23:26, Wout Mertens wrote:
>>
>>> Hi,
>>>
>>> try this on latest trunk (and several before that I think):
>>>
>>> 1. Create an empty database
>>> 2. Compact it
>>>
>>> Result => lots of ugly backtraces from couchdb.
>>>
>>> Is this a bug or a misfeature? Should I file a bug, if so, what  
>>> info should I give?
>>>
>>> Cheers,
>>>
>>> Wout.
>>>
>>
>>
>


Mime
View raw message