On Thu, Jun 08, 2023 at 04:53:50PM +0530, Ashutosh Sharma wrote: > Thanks for sharing your thoughts, Laurenz and Fujii-san. I've prepared > a patch that makes pg_promote error out if it couldn't send SIGUSR1 to > the postmaster or if the postmaster died in the middle of standby > promotion. PFA. Please note that now (with this patch) pg_promote only > returns false if the standby could not be promoted within the given > wait time. In case of any kind of failure, it just reports an error > based on the type of failure that occurred.
if (kill(PostmasterPid, SIGUSR1) != 0) { - ereport(WARNING, - (errmsg("failed to send signal to postmaster: %m"))); (void) unlink(PROMOTE_SIGNAL_FILE); - PG_RETURN_BOOL(false); + ereport(ERROR, + (errmsg("failed to send signal to postmaster: %m"))); } Shouldn't you assign an error code to this one rather than the default one for internal errors, like ERRCODE_SYSTEM_ERROR? /* return immediately if waiting was not requested */ @@ -744,7 +743,9 @@ pg_promote(PG_FUNCTION_ARGS) * necessity for manual cleanup of all postmaster children. */ if (rc & WL_POSTMASTER_DEATH) - PG_RETURN_BOOL(false); + ereport(FATAL, + (errcode(ERRCODE_ADMIN_SHUTDOWN), + errmsg("terminating connection due to unexpected postmaster exit"))); I would add an errcontext here, to let somebody know that the connection died while waiting for the promotion to be processed, say "while waiting on promotion". -- Michael
signature.asc
Description: PGP signature