couchdb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tamas Nagy <>
Subject Re: [jira] Commented: (COUCHDB-397) POST _restart only restarts couch_server process
Date Tue, 30 Jun 2009 14:02:25 GMT
Hi Bob,

The variable name is bit misleading. gen_server:cast is very happy  
with atoms and Pids as well. As long as the atom is the name a process  
is registered under. In this case this is true as the couch_log  
process is registered under the name couch_log.

Well I'm not very familiar with the code yet but as far as I can see  
this will never work or rather it will always work, but will not do  
1. couch_log (which is a gen_event) stop function calls  
2. couch_event_sup:stop/1 call gen_server:cast(couch_log,stop)

The problem is on two levels:
1. couch_log is a gen_event not a gen_server. This might actually work  
though meaning that the couch_log will get the stop message on the  
handle_info/2 function (note: the gen_event does not have a  
handle_cast callback). Otherwise the message will just go to the void.  
It is probably the first.
2. couch_log does not have code to handle the stop message.

Not to mention it does not make sense imho to jump back to the  
couch_event_sup to restart oneself. By the way why is the  
couch_event_sup a gen_server not a supervisor?

Wouldn't having a supervisor (couch_event_sup) which would restart the  
gen_event if it stops itself work better?

... I've read a bit more of the code (still wrapping my head around  
the whole codebase): The couch_event_sup is not even related to the  
couch_log so why is couch_log calling into it?

Did I read the whole thing wrong?


Tamas Nagy
Erlang Training & Consulting

On 30 Jun 2009, at 13:03, Robert Dionne wrote:

> On Jun 29, 2009, at 4:42 PM, Adam Kocoloski (JIRA) wrote:
>>   [

>> #action_12725336 ]
>> Adam Kocoloski commented on COUCHDB-397:
>> ----------------------------------------
>> Hi Paul, I probably shouldn't have brought up the whole  
>> exit(couch_config, blah) thing.  Let's focus on the supervisor  
>> behavior.
>> The trunk code *does not* restart any secondary services.  AFAICT  
>> these lines are a no-op:
>>   supervisor:terminate_child(couch_secondary_services, couch_server),
>>   supervisor:restart_child(couch_secondary_services, couch_server).
>> There is no child of couch_secondary_services named couch_server.   
>> Damien should comment on the rationale.  Perhaps what was intended  
>> was
>>   supervisor:terminate_child(couch_server_sup,  
>> couch_secondary_services),
>>   supervisor:restart_child(couch_server_sup,  
>> couch_secondary_services).
>> That change would also fix COUCHDB-398 -- it just restarts a bit  
>> more of the application than what I posted.
>> Not sure where I made a comment that indicated my diff in  
>> COUCHDB-398 didn't work.  I've checked -- it does reset the stats  
>> counters, and the test suite does pass.
>> I think having a working _restart handler would actually be kinda  
>> useful, much like the _log handler Jan implemented a while back.
> Adam,
>  Thanks for finding this stats bug, I've been randomly seeing it for  
> some time and it was annoying. Actually I was just reviewing  
> couch_log, in light of your comments in COUCHDB-355 about  
> couch_db_update_notifier_sup. It should do a similar thing to  
> couch_log when the config changes and an empty value is set, stop  
> the module and let it restart.
>  However looking at couch_log I'm not sure if the stop function  
> works correctly as it calls couch_event_sup:stop(couch_log), passing  
> an atom, where the couch_event_sup function wants a Pid. Seems odd?
> Cheers,
> Bob
>> I propose that /_restart should gracefully restart the entire couch  
>> application, not just the couch_server process.  Cheers, Adam
>>> POST _restart only restarts couch_server process
>>> ------------------------------------------------
>>>               Key: COUCHDB-397
>>>               URL:
>>>           Project: CouchDB
>>>        Issue Type: Bug
>>>  Affects Versions: 0.9
>>>          Reporter: Adam Kocoloski
>>>          Assignee: Adam Kocoloski
>>> Perhaps this is by design, but POSTing to /_restart only restarts  
>>> the couch_server process.  It does not restart any of the other  
>>> myriad processes CouchDB relies on for operation.  In particular,  
>>> this causes the stats test suite to occasionally fail, because the  
>>> stats counters do not get reset.  The test that fails is
>>> Assertion 'open_databases > 0 && max >= open_databases, name' 

>>> failed: should keep the same number of open databases when  
>>> reaching the max_dbs_open limit
>> -- 
>> This message is automatically generated by JIRA.
>> -
>> You can reply to this email to add a comment to the issue online.

View raw message