On 2020/04/09 23:06, Fujii Masao wrote:


On 2020/04/09 2:35, Robert Haas wrote:
On Wed, Apr 8, 2020 at 1:15 AM Fujii Masao <masao.fu...@oss.nttdata.com> wrote:
When there is a backup_manifest in the database cluster, it's included in
the backup even when --no-manifest is specified. ISTM that this is problematic
because the backup_manifest is obviously not valid for the backup.
So, isn't it better to always exclude the *existing* backup_manifest in the
cluster from the backup, like backup_label/tablespace_map? Patch attached.

Also I found the typo in the document. Patch attached.

Both patches look good. The second one is definitely a mistake on my
part, and the first one seems like a totally reasonable change.
Thanks!

Thanks for reviewing them! I pushed them.

I found other minor issues.

+          When this option is specified with a value of <literal>yes</literal>
+          or <literal>force-escape</literal>, a backup manifest is created

force-escape should be force-encode.
Patch attached.

-       while ((c = getopt_long(argc, argv, 
"CD:F:r:RS:T:X:l:nNzZ:d:c:h:p:U:s:wWkvP",
+       while ((c = getopt_long(argc, argv, 
"CD:F:r:RS:T:X:l:nNzZ:d:c:h:p:U:s:wWkvPm:",

"m:" seems unnecessary, so should be removed?
Patch attached.

+       if (strcmp(basedir, "-") == 0)
+       {
+               char            header[512];
+               PQExpBufferData buf;
+
+               initPQExpBuffer(&buf);
+               ReceiveBackupManifestInMemory(conn, &buf);

backup_manifest should be received only when the manifest is enabled,
so ISTM that the flag "manifest" should be checked in the above if-condition.
Thought? Patch attached.

Regards,

--
Fujii Masao
Advanced Computing Technology Center
Research and Development Headquarters
NTT DATA CORPORATION
diff --git a/doc/src/sgml/protocol.sgml b/doc/src/sgml/protocol.sgml
index 536de9a698..87292739b5 100644
--- a/doc/src/sgml/protocol.sgml
+++ b/doc/src/sgml/protocol.sgml
@@ -2578,19 +2578,19 @@ The commands accepted in replication mode are:
        </varlistentry>
 
        <varlistentry>
-        <term><literal>MANIFEST</literal></term>
+        <term><literal>MANIFEST</literal> 
<replaceable>manifest_option</replaceable></term>
         <listitem>
          <para>
           When this option is specified with a value of <literal>yes</literal>
-          or <literal>force-escape</literal>, a backup manifest is created
+          or <literal>force-encode</literal>, a backup manifest is created
           and sent along with the backup.  The manifest is a list of every
           file present in the backup with the exception of any WAL files that
           may be included. It also stores the size, last modification time, and
           an optional checksum for each file.
-          A value of <literal>force-escape</literal> forces all filenames
+          A value of <literal>force-encode</literal> forces all filenames
           to be hex-encoded; otherwise, this type of encoding is performed only
           for files whose names are non-UTF8 octet sequences.
-          <literal>force-escape</literal> is intended primarily for testing
+          <literal>force-encode</literal> is intended primarily for testing
           purposes, to be sure that clients which read the backup manifest
           can handle this case. For compatibility with previous releases,
           the default is <literal>MANIFEST 'no'</literal>.
@@ -2599,7 +2599,7 @@ The commands accepted in replication mode are:
        </varlistentry>
 
        <varlistentry>
-        <term><literal>MANIFEST_CHECKSUMS</literal></term>
+        <term><literal>MANIFEST_CHECKSUMS</literal> 
<replaceable>checksum_algorithm</replaceable></term>
         <listitem>
          <para>
           Specifies the algorithm that should be applied to each file included
diff --git a/src/bin/pg_basebackup/pg_basebackup.c 
b/src/bin/pg_basebackup/pg_basebackup.c
index de098b3558..f1af8f904a 100644
--- a/src/bin/pg_basebackup/pg_basebackup.c
+++ b/src/bin/pg_basebackup/pg_basebackup.c
@@ -2271,7 +2271,7 @@ main(int argc, char **argv)
 
        atexit(cleanup_directories_atexit);
 
-       while ((c = getopt_long(argc, argv, 
"CD:F:r:RS:T:X:l:nNzZ:d:c:h:p:U:s:wWkvPm:",
+       while ((c = getopt_long(argc, argv, 
"CD:F:r:RS:T:X:l:nNzZ:d:c:h:p:U:s:wWkvP",
                                                        long_options, 
&option_index)) != -1)
        {
                switch (c)
diff --git a/src/bin/pg_basebackup/pg_basebackup.c 
b/src/bin/pg_basebackup/pg_basebackup.c
index f1af8f904a..65ca1b16f0 100644
--- a/src/bin/pg_basebackup/pg_basebackup.c
+++ b/src/bin/pg_basebackup/pg_basebackup.c
@@ -1211,7 +1211,7 @@ ReceiveTarFile(PGconn *conn, PGresult *res, int rownum)
         * we're writing a tarfile to stdout, we don't have that option, so
         * include it in the one tarfile we've got.
         */
-       if (strcmp(basedir, "-") == 0)
+       if (strcmp(basedir, "-") == 0 && manifest)
        {
                char            header[512];
                PQExpBufferData buf;

Reply via email to