From: | Michael Paquier <michael(at)paquier(dot)xyz> |
---|---|
To: | Fujii Masao <masao(dot)fujii(at)gmail(dot)com> |
Cc: | PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: pg_promote() can cause busy loop |
Date: | 2019-09-05 01:25:55 |
Message-ID: | 20190905012555.GC14853@paquier.xyz |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | 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
From | Date | Subject | |
---|---|---|---|
Next Message | Michael Paquier | 2019-09-05 01:41:31 | Re: [HACKERS] [PATCH] pageinspect function to decode infomasks |
Previous Message | Edmund Horner | 2019-09-05 01:06:56 | Re: Tid scan improvements |