Remove dependency to StringInfo in xlogbackup.{c.h}

This was used as the returned result type of the generated contents for
the backup_label and backup history files.  This is replaced by a simple
string, reducing the cleanup burden of all the callers of
build_backup_content().

Reviewed-by: Bharath Rupireddy
Discussion: https://postgr.es/m/YzERvNPaZivHEKZJ@paquier.xyz
This commit is contained in:
Michael Paquier 2022-09-27 09:15:07 +09:00
parent 31d2c4716e
commit e1e6f8f3df
5 changed files with 15 additions and 15 deletions

View File

@ -8711,7 +8711,7 @@ do_pg_backup_stop(BackupState *state, bool waitforarchive)
} }
else else
{ {
StringInfo history_file; char *history_file;
/* /*
* Write the backup-end xlog record * Write the backup-end xlog record
@ -8751,8 +8751,7 @@ do_pg_backup_stop(BackupState *state, bool waitforarchive)
/* Build and save the contents of the backup history file */ /* Build and save the contents of the backup history file */
history_file = build_backup_content(state, true); history_file = build_backup_content(state, true);
fprintf(fp, "%s", history_file->data); fprintf(fp, "%s", history_file);
pfree(history_file->data);
pfree(history_file); pfree(history_file);
if (fflush(fp) || ferror(fp) || FreeFile(fp)) if (fflush(fp) || ferror(fp) || FreeFile(fp))

View File

@ -23,15 +23,16 @@
* When ishistoryfile is true, it creates the contents for a backup history * When ishistoryfile is true, it creates the contents for a backup history
* file, otherwise it creates contents for a backup_label file. * file, otherwise it creates contents for a backup_label file.
* *
* Returns the result generated as a palloc'd StringInfo. * Returns the result generated as a palloc'd string.
*/ */
StringInfo char *
build_backup_content(BackupState *state, bool ishistoryfile) build_backup_content(BackupState *state, bool ishistoryfile)
{ {
char startstrbuf[128]; char startstrbuf[128];
char startxlogfile[MAXFNAMELEN]; /* backup start WAL file */ char startxlogfile[MAXFNAMELEN]; /* backup start WAL file */
XLogSegNo startsegno; XLogSegNo startsegno;
StringInfo result = makeStringInfo(); StringInfo result = makeStringInfo();
char *data;
Assert(state != NULL); Assert(state != NULL);
@ -76,5 +77,8 @@ build_backup_content(BackupState *state, bool ishistoryfile)
appendStringInfo(result, "STOP TIMELINE: %u\n", state->stoptli); appendStringInfo(result, "STOP TIMELINE: %u\n", state->stoptli);
} }
return result; data = result->data;
pfree(result);
return data;
} }

View File

@ -130,7 +130,7 @@ pg_backup_stop(PG_FUNCTION_ARGS)
Datum values[PG_BACKUP_STOP_V2_COLS] = {0}; Datum values[PG_BACKUP_STOP_V2_COLS] = {0};
bool nulls[PG_BACKUP_STOP_V2_COLS] = {0}; bool nulls[PG_BACKUP_STOP_V2_COLS] = {0};
bool waitforarchive = PG_GETARG_BOOL(0); bool waitforarchive = PG_GETARG_BOOL(0);
StringInfo backup_label; char *backup_label;
SessionBackupState status = get_backup_status(); SessionBackupState status = get_backup_status();
/* Initialize attributes information in the tuple descriptor */ /* Initialize attributes information in the tuple descriptor */
@ -153,7 +153,7 @@ pg_backup_stop(PG_FUNCTION_ARGS)
backup_label = build_backup_content(backup_state, false); backup_label = build_backup_content(backup_state, false);
values[0] = LSNGetDatum(backup_state->stoppoint); values[0] = LSNGetDatum(backup_state->stoppoint);
values[1] = CStringGetTextDatum(backup_label->data); values[1] = CStringGetTextDatum(backup_label);
values[2] = CStringGetTextDatum(tablespace_map->data); values[2] = CStringGetTextDatum(tablespace_map->data);
/* Deallocate backup-related variables */ /* Deallocate backup-related variables */
@ -162,7 +162,6 @@ pg_backup_stop(PG_FUNCTION_ARGS)
pfree(tablespace_map->data); pfree(tablespace_map->data);
pfree(tablespace_map); pfree(tablespace_map);
tablespace_map = NULL; tablespace_map = NULL;
pfree(backup_label->data);
pfree(backup_label); pfree(backup_label);
/* Returns the record as Datum */ /* Returns the record as Datum */

View File

@ -317,15 +317,14 @@ perform_base_backup(basebackup_options *opt, bbsink *sink)
{ {
struct stat statbuf; struct stat statbuf;
bool sendtblspclinks = true; bool sendtblspclinks = true;
StringInfo backup_label; char *backup_label;
bbsink_begin_archive(sink, "base.tar"); bbsink_begin_archive(sink, "base.tar");
/* In the main tar, include the backup_label first... */ /* In the main tar, include the backup_label first... */
backup_label = build_backup_content(backup_state, false); backup_label = build_backup_content(backup_state, false);
sendFileWithContent(sink, BACKUP_LABEL_FILE, sendFileWithContent(sink, BACKUP_LABEL_FILE,
backup_label->data, &manifest); backup_label, &manifest);
pfree(backup_label->data);
pfree(backup_label); pfree(backup_label);
/* Then the tablespace_map file, if required... */ /* Then the tablespace_map file, if required... */

View File

@ -15,7 +15,6 @@
#define XLOG_BACKUP_H #define XLOG_BACKUP_H
#include "access/xlogdefs.h" #include "access/xlogdefs.h"
#include "lib/stringinfo.h"
#include "pgtime.h" #include "pgtime.h"
/* Structure to hold backup state. */ /* Structure to hold backup state. */
@ -36,7 +35,7 @@ typedef struct BackupState
pg_time_t stoptime; /* backup stop time */ pg_time_t stoptime; /* backup stop time */
} BackupState; } BackupState;
extern StringInfo build_backup_content(BackupState *state, extern char *build_backup_content(BackupState *state,
bool ishistoryfile); bool ishistoryfile);
#endif /* XLOG_BACKUP_H */ #endif /* XLOG_BACKUP_H */