diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 55cac186dc7..a1256a103b6 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -10481,8 +10481,7 @@ issue_xlog_fsync(int fd, XLogSegNo segno) XLogRecPtr do_pg_start_backup(const char *backupidstr, bool fast, TimeLineID *starttli_p, StringInfo labelfile, List **tablespaces, - StringInfo tblspcmapfile, bool infotbssize, - bool needtblspcmapfile) + StringInfo tblspcmapfile, bool needtblspcmapfile) { bool exclusive = (labelfile == NULL); bool backup_started_in_recovery = false; @@ -10702,14 +10701,6 @@ do_pg_start_backup(const char *backupidstr, bool fast, TimeLineID *starttli_p, datadirpathlen = strlen(DataDir); - /* - * Report that we are now estimating the total backup size if we're - * streaming base backup as requested by pg_basebackup - */ - if (tablespaces) - pgstat_progress_update_param(PROGRESS_BASEBACKUP_PHASE, - PROGRESS_BASEBACKUP_PHASE_ESTIMATE_BACKUP_SIZE); - /* Collect information about all tablespaces */ tblspcdir = AllocateDir("pg_tblspc"); while ((de = ReadDir(tblspcdir, "pg_tblspc")) != NULL) @@ -10774,8 +10765,7 @@ do_pg_start_backup(const char *backupidstr, bool fast, TimeLineID *starttli_p, ti->oid = pstrdup(de->d_name); ti->path = pstrdup(buflinkpath.data); ti->rpath = relpath ? pstrdup(relpath) : NULL; - ti->size = infotbssize ? - sendTablespace(fullpath, ti->oid, true, NULL) : -1; + ti->size = -1; if (tablespaces) *tablespaces = lappend(*tablespaces, ti); diff --git a/src/backend/access/transam/xlogfuncs.c b/src/backend/access/transam/xlogfuncs.c index 00e1b33ed5f..290658b22c1 100644 --- a/src/backend/access/transam/xlogfuncs.c +++ b/src/backend/access/transam/xlogfuncs.c @@ -76,7 +76,7 @@ pg_start_backup(PG_FUNCTION_ARGS) if (exclusive) { startpoint = do_pg_start_backup(backupidstr, fast, NULL, NULL, - NULL, NULL, false, true); + NULL, NULL, true); } else { @@ -94,7 +94,7 @@ pg_start_backup(PG_FUNCTION_ARGS) register_persistent_abort_backup_handler(); startpoint = do_pg_start_backup(backupidstr, fast, NULL, label_file, - NULL, tblspc_map_file, false, true); + NULL, tblspc_map_file, true); } PG_RETURN_LSN(startpoint); diff --git a/src/backend/replication/basebackup.c b/src/backend/replication/basebackup.c index 10082820655..62633e7ddcd 100644 --- a/src/backend/replication/basebackup.c +++ b/src/backend/replication/basebackup.c @@ -58,6 +58,8 @@ typedef struct pg_checksum_type manifest_checksum_type; } basebackup_options; +static int64 sendTablespace(char *path, char *oid, bool sizeonly, + struct backup_manifest_info *manifest); static int64 sendDir(const char *path, int basepathlen, bool sizeonly, List *tablespaces, bool sendtblspclinks, backup_manifest_info *manifest, const char *spcoid); @@ -307,8 +309,7 @@ perform_base_backup(basebackup_options *opt) PROGRESS_BASEBACKUP_PHASE_WAIT_CHECKPOINT); startptr = do_pg_start_backup(opt->label, opt->fastcheckpoint, &starttli, labelfile, &tablespaces, - tblspc_map_file, - opt->progress, opt->sendtblspcmapfile); + tblspc_map_file, opt->sendtblspcmapfile); /* * Once do_pg_start_backup has been called, ensure that any failure causes @@ -337,10 +338,7 @@ perform_base_backup(basebackup_options *opt) /* Add a node for the base directory at the end */ ti = palloc0(sizeof(tablespaceinfo)); - if (opt->progress) - ti->size = sendDir(".", 1, true, tablespaces, true, NULL, NULL); - else - ti->size = -1; + ti->size = -1; tablespaces = lappend(tablespaces, ti); /* @@ -349,10 +347,19 @@ perform_base_backup(basebackup_options *opt) */ if (opt->progress) { + pgstat_progress_update_param(PROGRESS_BASEBACKUP_PHASE, + PROGRESS_BASEBACKUP_PHASE_ESTIMATE_BACKUP_SIZE); + foreach(lc, tablespaces) { tablespaceinfo *tmp = (tablespaceinfo *) lfirst(lc); + if (tmp->path == NULL) + tmp->size = sendDir(".", 1, true, tablespaces, true, NULL, + NULL); + else + tmp->size = sendTablespace(tmp->path, tmp->oid, true, + NULL); backup_total += tmp->size; } } @@ -1145,7 +1152,7 @@ sendFileWithContent(const char *filename, const char *content, * * Only used to send auxiliary tablespaces, not PGDATA. */ -int64 +static int64 sendTablespace(char *path, char *spcoid, bool sizeonly, backup_manifest_info *manifest) { diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h index e917dfe92d8..347a38f57cf 100644 --- a/src/include/access/xlog.h +++ b/src/include/access/xlog.h @@ -372,7 +372,7 @@ typedef enum SessionBackupState extern XLogRecPtr do_pg_start_backup(const char *backupidstr, bool fast, TimeLineID *starttli_p, StringInfo labelfile, - List **tablespaces, StringInfo tblspcmapfile, bool infotbssize, + List **tablespaces, StringInfo tblspcmapfile, bool needtblspcmapfile); extern XLogRecPtr do_pg_stop_backup(char *labelfile, bool waitforarchive, TimeLineID *stoptli_p); diff --git a/src/include/replication/basebackup.h b/src/include/replication/basebackup.h index 923a651cac3..f5f044dacd4 100644 --- a/src/include/replication/basebackup.h +++ b/src/include/replication/basebackup.h @@ -14,9 +14,6 @@ #include "nodes/replnodes.h" -struct backup_manifest_info; /* avoid including backup_manifest.h */ - - /* * Minimum and maximum values of MAX_RATE option in BASE_BACKUP command. */ @@ -33,7 +30,4 @@ typedef struct extern void SendBaseBackup(BaseBackupCmd *cmd); -extern int64 sendTablespace(char *path, char *oid, bool sizeonly, - struct backup_manifest_info *manifest); - #endif /* _BASEBACKUP_H */