Emit log when restore_command succeeds but archived file faills to be restored.
authorFujii Masao <fujii@postgresql.org>
Fri, 20 Nov 2020 06:42:47 +0000 (15:42 +0900)
committerFujii Masao <fujii@postgresql.org>
Fri, 20 Nov 2020 06:42:47 +0000 (15:42 +0900)
Previously, when restore_command claimed to succeed but failed to restore
the file with the right name, for example, due to mis-configuration of
restore_command, no log message was reported. Then the recovery failed
later with an error message not directly related to the issue.

This commit changes the recovery so that a log message is emitted in
this error case. This would enable us to investigate what happened in
this case more easily.

Author: Jeff Janes, Fujii Masao
Reviewed-by: Pavel Borisov, Kyotaro Horiguchi
Discussion: https://postgr.es/m/CAMkU=1xkFs3Omp4JR4wMYWdam_KLuj6LXnTYfU8u3T0h=PLLMQ@mail.gmail.com

src/backend/access/transam/xlogarchive.c

index cae93ab69dd714fdabfdaf496f90cb1376a2cc49..f39dc4ddf1a55dd506a1f5169b9356815f97715e 100644 (file)
@@ -220,11 +220,12 @@ RestoreArchivedFile(char *path, const char *xlogfname,
        else
        {
            /* stat failed */
-           if (errno != ENOENT)
-               ereport(FATAL,
-                       (errcode_for_file_access(),
-                        errmsg("could not stat file \"%s\": %m",
-                               xlogpath)));
+           int         elevel = (errno == ENOENT) ? LOG : FATAL;
+
+           ereport(elevel,
+                   (errcode_for_file_access(),
+                    errmsg("could not stat file \"%s\": %m", xlogpath),
+                    errdetail("restore_command returned a zero exit status, but stat() failed.")));
        }
    }