diff options
author | Michael Paquier <michael@paquier.xyz> | 2023-01-18 11:15:48 +0900 |
---|---|---|
committer | Michael Paquier <michael@paquier.xyz> | 2023-01-18 11:15:48 +0900 |
commit | 14bdb3f13de16523609d838b725540af5e23ddd3 (patch) | |
tree | 3a646672f4cfbe58b76100914f31732844073f96 /src/fe_utils/archive.c | |
parent | 2f31f405e1fa561db27e8dc6f7f3cb3dbd8c0c4f (diff) | |
download | postgresql-14bdb3f13de16523609d838b725540af5e23ddd3.tar.gz |
Refactor code for restoring files via shell commands
Presently, restore_command uses a different code path than
archive_cleanup_command and recovery_end_command. These code paths
are similar and can be easily combined, as long as it is possible to
identify if a command should:
- Issue a FATAL on signal.
- Exit immediately on SIGTERM.
While on it, this removes src/common/archive.c and its associated
header. Since the introduction of c96de2c, BuildRestoreCommand() has
become a simple wrapper of replace_percent_placeholders() able to call
make_native_path(). This simplifies shell_restore.c as long as
RestoreArchivedFile() includes a call to make_native_path().
Author: Nathan Bossart
Reviewed-by: Andres Freund, Michael Paquier
Discussion: https://postgr.es/m/20221227192449.GA3672473@nathanxps13
Diffstat (limited to 'src/fe_utils/archive.c')
-rw-r--r-- | src/fe_utils/archive.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/fe_utils/archive.c b/src/fe_utils/archive.c index eb1c930ae7..c1ce250c90 100644 --- a/src/fe_utils/archive.c +++ b/src/fe_utils/archive.c @@ -19,8 +19,8 @@ #include <sys/stat.h> #include "access/xlog_internal.h" -#include "common/archive.h" #include "common/logging.h" +#include "common/percentrepl.h" #include "fe_utils/archive.h" @@ -41,13 +41,18 @@ RestoreArchivedFile(const char *path, const char *xlogfname, { char xlogpath[MAXPGPATH]; char *xlogRestoreCmd; + char *nativePath; int rc; struct stat stat_buf; snprintf(xlogpath, MAXPGPATH, "%s/" XLOGDIR "/%s", path, xlogfname); - xlogRestoreCmd = BuildRestoreCommand(restoreCommand, xlogpath, - xlogfname, NULL); + nativePath = pstrdup(xlogpath); + make_native_path(nativePath); + xlogRestoreCmd = replace_percent_placeholders(restoreCommand, + "restore_command", "fp", + xlogfname, nativePath); + pfree(nativePath); /* * Execute restore_command, which should copy the missing file from |