On Thu, Feb 16, 2023 at 01:17:54PM -0800, Andres Freund wrote: > On 2023-02-16 12:15:12 -0800, Nathan Bossart wrote: >> On Thu, Feb 16, 2023 at 11:29:56AM -0800, Andres Freund wrote: >> > On 2023-02-15 10:44:07 -0800, Nathan Bossart wrote: >> >> @@ -144,10 +170,12 @@ basic_archive_configured(void) >> >> * Archives one file. >> >> */ >> >> static bool >> >> -basic_archive_file(const char *file, const char *path) >> >> +basic_archive_file(ArchiveModuleState *state, const char *file, const >> >> char *path) >> >> { >> >> sigjmp_buf local_sigjmp_buf; >> > >> > Not related the things changed here, but this should never have been pushed >> > down into individual archive modules. There's absolutely no way that we're >> > going to keep this up2date and working correctly in random archive >> > modules. And it would break if archive modules are ever called outside of >> > pgarch.c. >> >> Yeah. IIRC I did briefly try to avoid this, but the difficulty was that >> each module will have its own custom cleanup logic. > > It can use PG_TRY/CATCH for that, if the top-level sigsetjmp is in pgarch.c. > Or you could add a cleanup callback to the API, to be called after the > top-level cleanup in pgarch.c.
Yeah, that seems workable. > I'm quite baffled by: > /* Close any files left open by copy_file() or compare_files() > */ > AtEOSubXact_Files(false, InvalidSubTransactionId, > InvalidSubTransactionId); > > in basic_archive_file(). It seems *really* off to call AtEOSubXact_Files() > completely outside the context of a transaction environment. And it only does > the thing you want because you pass parameters that aren't actually valid in > the normal use in AtEOSubXact_Files(). I really don't understand how that's > supposed to be ok. Hm. Should copy_file() and compare_files() have PG_FINALLY blocks that attempt to close the files instead? What would you recommend? -- Nathan Bossart Amazon Web Services: https://aws.amazon.com