Re: pg_promote() can cause busy loop

Поиск
Список
Период
Сортировка
От Michael Paquier
Тема Re: pg_promote() can cause busy loop
Дата
Msg-id 20190905012555.GC14853@paquier.xyz
обсуждение исходный текст
Ответ на pg_promote() can cause busy loop  (Fujii Masao <masao.fujii@gmail.com>)
Ответы Re: pg_promote() can cause busy loop  (Fujii Masao <masao.fujii@gmail.com>)
Список pgsql-hackers
On Thu, Sep 05, 2019 at 09:46:26AM +0900, Fujii Masao wrote:
> I found small issue in pg_promote(). If postmaster dies
> while pg_promote() is waiting for the standby promotion to finish,
> pg_promote() can cause busy loop. This happens because
> pg_promote() does nothing when WaitLatch() detects
> the postmaster death event. I think that pg_promote()
> should bail out of the loop immediately in that case.
>
> Attached is the patch for the fix.

Indeed, this is not correct.

-   ereport(WARNING,
-           (errmsg("server did not promote within %d seconds",
-           wait_seconds)));
+   if (i >= WAITS_PER_SECOND * wait_seconds)
+       ereport(WARNING,
+               (errmsg("server did not promote within %d seconds", wait_seconds)));

Would it make more sense to issue a warning mentioning the postmaster
death and then return PG_RETURN_BOOL(false) instead of breaking out of
the loop?  It could be confusing to warn about a timeout if the
postmaster died in parallel, and we know the actual reason why the
promotion did not happen in this case.
--
Michael

Вложения

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

Предыдущее
От: Edmund Horner
Дата:
Сообщение: Re: Tid scan improvements
Следующее
От: Michael Paquier
Дата:
Сообщение: Re: [HACKERS] [PATCH] pageinspect function to decode infomasks