Re: Weird failure with latches in curculio on v15
Nathan Bossart <nathandbossart@gmail.com>
From: Nathan Bossart <nathandbossart@gmail.com>
To: Andres Freund <andres@anarazel.de>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, Michael Paquier <michael@paquier.xyz>, Robert Haas <robertmhaas@gmail.com>, Thomas Munro <thomas.munro@gmail.com>, Fujii Masao <fujii@postgresql.org>, Postgres hackers <pgsql-hackers@lists.postgresql.org>
Date: 2023-02-03T18:54:17Z
Lists: pgsql-hackers
Attachments
- v4-0001-stopgap-fix-for-restore_command.patch (text/x-diff)
On Thu, Feb 02, 2023 at 11:44:22PM -0800, Andres Freund wrote: > On 2023-02-03 02:24:03 -0500, Tom Lane wrote: >> Andres Freund <andres@anarazel.de> writes: >> > A workaround for the back branches could be to have a test in >> > StartupProcShutdownHandler() that tests if MyProcPid == getpid(), and >> > not do the proc_exit() if they don't match. We probably should just do >> > an _exit() in that case. >> >> Might work. > > I wonder if we should add code complaining loudly about such a mismatch > to proc_exit(), in addition to handling it more silently in > StartupProcShutdownHandler(). Also, an assertion in > [Auxiliary]ProcKill that proc->xid == MyProcPid == getpid() seems like a > good idea. From the discussion, it sounds like we don't want to depend on the child process receiving/handling the signal, so we can't get rid of the break-out-of-system() behavior (at least not in back-branches). I've put together some work-in-progress patches for the stopgap/back-branch fix. 0001 is just v1-0001 from upthread. This moves Pre/PostRestoreCommand to surround only the call to system(). I think this should get us closer to pre-v15 behavior. 0002 adds the getpid() check mentioned above to StartupProcShutdownHandler(), and it adds assertions to proc_exit() and [Auxiliary]ProcKill(). 0003 adds checks for shutdown requests before and after the call to shell_restore(). IMO the Pre/PostRestoreCommand stuff is an implementation detail for restore_command, so I think it behooves us to have some additional shutdown checks that apply even for recovery modules. This patch could probably be moved to the recovery modules thread. Is this somewhat close to what folks had in mind? -- Nathan Bossart Amazon Web Services: https://aws.amazon.com
Commits
-
Avoid calling proc_exit() in processes forked by system().
- d0e7f95b4845 11.22 landed
- e2e16904224a 12.17 landed
- ac1dfc303d0e 13.13 landed
- 54fc9dca5b10 14.10 landed
- c9265ae80b6a 15.5 landed
- ee06199fcb0a 16.1 landed
- 97550c071197 17.0 landed
-
Move extra code out of the Pre/PostRestoreCommand() section.
- 882e522d6468 15.5 landed
- d1c56ad37b96 16.1 landed
- 8fb13dd6ab5b 17.0 landed
-
Revert refactoring of restore command code to shell_restore.c
- 2f6e15ac93c5 16.0 landed
-
Refactor code in charge of running shell-based recovery commands
- 9a740f81eb02 16.0 cited
-
Clean up inconsistent use of fflush().
- 7fed801135ba 16.0 cited
-
Report wait events for local shell commands like archive_command.
- 1b06d7bac901 15.0 cited