On Tue, Sep 20, 2022 at 05:13:49PM +0530, Bharath Rupireddy wrote: > On Tue, Sep 20, 2022 at 7:20 AM Michael Paquier <mich...@paquier.xyz> wrote: > I've separated out these variables from the backup state, please see > the attached v9 patch.
Thanks, the separation looks cleaner. >>> I've also taken help of the error callback mechanism to clean up the >>> allocated memory in case of a failure. For do_pg_abort_backup() cases, >>> I think we don't need to clean the memory because that gets called on >>> proc exit (before_shmem_exit()). >> >> Memory could still bloat while the process running the SQL functions >> is running depending on the error code path, anyway. > > I didn't get your point. Can you please elaborate it? I think adding > error callbacks at the right places would free up the memory for us. > Please note that we already are causing memory leaks on HEAD today. I mean that HEAD makes no effort in freeing this memory in TopMemoryContext on session ERROR. > I addressed the above review comments. I also changed a wrong comment > [1] that lies before pg_backup_start() even after the removal of > exclusive backup. > > I'm attaching v9 patch set herewith, 0001 - refactors the backup code > with backup state, 0002 - adds error callbacks to clean up the memory > allocated for backup variables. Please review them further. I have a few comments on 0001. +#include <access/xlogbackup.h> Double quotes wanted here. deallocate_backup_variables() is the only part of xlogbackup.c that includes references of the tablespace map_and backup_label StringInfos. I would be tempted to fully decouple that from xlogbackup.c/h for the time being. - tblspc_map_file = makeStringInfo(); Not sure that there is a need for a rename here. +void +build_backup_content(BackupState *state, bool ishistoryfile, StringInfo str) +{ It would be more natural to have build_backup_content() do by itself the initialization of the StringInfo for the contents of backup_label and return it as a result of the routine? This is short-lived in xlogfuncs.c when the backup ends. @@ -248,18 +250,25 @@ perform_base_backup(basebackup_options *opt, bbsink *sink) [...] + /* Construct backup_label contents. */ + build_backup_content(backup_state, false, backup_label); Actually, for base backups, perhaps it would be more intuitive to build and free the StringInfo of the backup_label when we send it for base.tar rather than initializing it at the beginning and freeing it at the end? - * pg_backup_start: set up for taking an on-line backup dump + * pg_backup_start: start taking an on-line backup. * - * Essentially what this does is to create a backup label file in $PGDATA, - * where it will be archived as part of the backup dump. The label file - * contains the user-supplied label string (typically this would be used - * to tell where the backup dump will be stored) and the starting time and - * starting WAL location for the dump. + * This function starts the backup and creates tablespace_map contents. The last part of the comment is still correct while the former is not, so this loses some information. -- Michael
signature.asc
Description: PGP signature