summaryrefslogtreecommitdiff
path: root/src/fe_utils/archive.c
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2023-01-18 11:15:48 +0900
committerMichael Paquier <michael@paquier.xyz>2023-01-18 11:15:48 +0900
commit14bdb3f13de16523609d838b725540af5e23ddd3 (patch)
tree3a646672f4cfbe58b76100914f31732844073f96 /src/fe_utils/archive.c
parent2f31f405e1fa561db27e8dc6f7f3cb3dbd8c0c4f (diff)
downloadpostgresql-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.c11
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