Don't export basebackup.c's sendTablespace().
authorRobert Haas <rhaas@postgresql.org>
Wed, 17 Jun 2020 14:57:34 +0000 (10:57 -0400)
committerRobert Haas <rhaas@postgresql.org>
Wed, 17 Jun 2020 14:57:34 +0000 (10:57 -0400)
Commit 72d422a5227ef6f76f412486a395aba9f53bf3f0 made xlog.c call
sendTablespace() with the 'sizeonly' argument set to true, which
required basebackup.c to export sendTablespace(). However, that's
kind of ugly, so instead defer the call to sendTablespace() until
basebackup.c regains control. That way, it can still be a static
function.

Patch by me, reviewed by Amit Kapila and Kyotaro Horiguchi.

Discussion: http://postgr.es/m/CA+TgmoYq+59SJ2zBbP891ngWPA9fymOqntqYcweSDYXS2a620A@mail.gmail.com

src/backend/access/transam/xlog.c
src/backend/access/transam/xlogfuncs.c
src/backend/replication/basebackup.c
src/include/access/xlog.h
src/include/replication/basebackup.h

index 55cac186dc71fcc2f4628f9974b30850bb51eb5d..a1256a103b618eb6e2987b7bc9cfcc5edc044390 100644 (file)
@@ -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);
index 00e1b33ed5fd97ed256a592fb825d8d51bbe3a03..290658b22c17ea346f8632cc843e0040e2445ee9 100644 (file)
@@ -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);
index 100828206550c65a002c81fdec56a5cd38dc3ad6..62633e7ddcd59edfd80ca6b5c390d48866e37565 100644 (file)
@@ -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)
 {
index e917dfe92d84e3300659a73891a459292f374ffb..347a38f57cf4c5fc29d6cc3ebae7b8363ab70d35 100644 (file)
@@ -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);
index 923a651cac3fc04591194e4f9069b383dda527e2..f5f044dacd41c8d6a27daa4f1d82c3c4c65bd746 100644 (file)
@@ -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 */