Re: [bug fix] "pg_ctl stop" times out when it should respond quickly

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: [bug fix] "pg_ctl stop" times out when it should respond quickly
Дата
Msg-id 30805.1386110129@sss.pgh.pa.us
обсуждение исходный текст
Ответ на [bug fix] "pg_ctl stop" times out when it should respond quickly  ("MauMau" <maumau307@gmail.com>)
Ответы Re: [bug fix] "pg_ctl stop" times out when it should respond quickly
Re: [bug fix] "pg_ctl stop" times out when it should respond quickly
Список pgsql-hackers
"MauMau" <maumau307@gmail.com> writes:
> The problem occurs in the sequence below:

> 1. postmaster creates $PGDATA/postmaster.pid.
> 2. postmaster tries to resolve the value of listen_addresses to IP 
> addresses.  This took about 15 seconds in my failure scenario.
> 3. During 2, pg_ctl sends SIGTERM to postmaster.
> 4. postmaster terminates immediately without deleting 
> $PGDATA/postmaster.pid.  This is because it hasn't set signal handlers yet.
> 5. "pg_ctl stop" waits in a loop until $PGDATA/postmaster.pid disappears. 
> But the file does not disappear and it times out.

Hm.  I wonder if we shouldn't block SIGTERM etc. earlier.  It hardly seems
improbable that such signals would arrive during a slow startup.

> *** 907,913 ****
>   
>           for (cnt = 0; cnt < wait_seconds; cnt++)
>           {
> !             if ((pid = get_pgpid()) != 0)
>               {
>                   print_msg(".");
>                   pg_usleep(1000000);        /* 1 sec */
> --- 907,914 ----
>   
>           for (cnt = 0; cnt < wait_seconds; cnt++)
>           {
> !             if ((pid = get_pgpid()) != 0 &&
> !                 postmaster_is_alive((pid_t) pid))
>               {
>                   print_msg(".");
>                   pg_usleep(1000000);        /* 1 sec */

If you're going to do a postmaster_is_alive check, why bother with
repeated get_pgpid()?

I think the reason why it was coded like that was that we hadn't written
postmaster_is_alive() yet, or maybe we had but didn't want to trust it.
However, with the coding you have here, we're fully exposed to any failure
modes postmaster_is_alive() may have; so there's not a lot of value in
accepting those and get_pgpid's failure modes too.
        regards, tom lane



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: pgsql: Fix a couple of bugs in MultiXactId freezing
Следующее
От: Josh Berkus
Дата:
Сообщение: Re: Why we are going to have to go DirectIO