From a642f8bdb329374ce3bc8120a4d9e70b71cf3b92 Mon Sep 17 00:00:00 2001 From: chenzhikai <895543892@qq.com> Date: Thu, 12 Oct 2023 11:52:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E8=B5=84=E6=BA=90=E6=B1=A0?= =?UTF-8?q?=E5=8C=96=E5=8D=95=E9=9B=86=E7=BE=A4=E5=8D=87=E7=BA=A7=E5=8F=8C?= =?UTF-8?q?=E9=9B=86=E7=BE=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bin/initdb/initdb.cpp | 2 +- src/bin/pg_probackup/dir.cpp | 4 ++++ src/bin/pg_probackup/pg_probackupc.h | 1 + src/bin/pg_probackup/util.cpp | 23 ++++++++++++++++++++++- 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/bin/initdb/initdb.cpp b/src/bin/initdb/initdb.cpp index 12fb5d565..b1b11f6a5 100644 --- a/src/bin/initdb/initdb.cpp +++ b/src/bin/initdb/initdb.cpp @@ -4932,7 +4932,7 @@ int main(int argc, char* argv[]) } if (enable_dss && ss_issharedstorage) { - ss_need_mkspecialdir = (ss_enable_dorado && !ss_check_specialdir(vgdata)); + ss_need_mkspecialdir = !ss_check_specialdir(vgdata); ss_mkdirdir(ss_nodeid, pg_data, vgdata, vglog, ss_need_mkclusterdir, ss_need_mkspecialdir); } else { /* Create required subdirectories */ diff --git a/src/bin/pg_probackup/dir.cpp b/src/bin/pg_probackup/dir.cpp index 95d500f7b..44b17ecb2 100644 --- a/src/bin/pg_probackup/dir.cpp +++ b/src/bin/pg_probackup/dir.cpp @@ -1321,6 +1321,10 @@ create_data_directories(parray *dest_files, const char *data_dir, const char *ba if (ss_create_if_doublewrite(dir, instance_config.dss.vgdata, instance_config.dss.instance_id)) { continue; } + + if (ss_create_if_pg_replication(dir, instance_config.dss.vgdata, instance_config.dss.vglog)) { + continue; + } } /* tablespace_map exists */ diff --git a/src/bin/pg_probackup/pg_probackupc.h b/src/bin/pg_probackup/pg_probackupc.h index 13df3f742..19b31d02a 100644 --- a/src/bin/pg_probackup/pg_probackupc.h +++ b/src/bin/pg_probackup/pg_probackupc.h @@ -391,6 +391,7 @@ extern void parse_vgname_args(const char* args); extern bool is_ss_xlog(const char *ss_dir); extern void ss_createdir(const char *ss_dir, const char *vgdata, const char *vglog); extern bool ss_create_if_doublewrite(pgFile* dir, const char* vgdata, int instance_id); +extern bool ss_create_if_pg_replication(pgFile* dir, const char* vgdata, const char* vglog); extern char* xstrdup(const char* s); extern void set_min_recovery_point(pgFile *file, const char *fullpath, XLogRecPtr stop_backup_lsn); diff --git a/src/bin/pg_probackup/util.cpp b/src/bin/pg_probackup/util.cpp index c6bb47ddb..c7fa12452 100644 --- a/src/bin/pg_probackup/util.cpp +++ b/src/bin/pg_probackup/util.cpp @@ -594,10 +594,31 @@ ss_createdir(const char *ss_dir, const char *vgdata, const char *vglog) } } +bool +ss_create_if_pg_replication(pgFile* dir, const char* vgdata, const char* vglog) +{ + if (pg_strcasecmp(dir->rel_path, "pg_replication") == 0) { + char path[MAXPGPATH]; + errno_t rc = sprintf_s(path, sizeof(path), "%s/%s", vglog, dir->rel_path); + securec_check_ss_c(rc, "\0", "\0"); + char link_path[MAXPGPATH]; + rc = sprintf_s(link_path, sizeof(link_path), "%s/%s", vgdata, dir->rel_path); + securec_check_ss_c(rc, "\0", "\0"); + dir_create_dir(path, DIR_PERMISSION); + if (symlink(path, link_path) < 0) { + elog(ERROR, "can not link dss dir \"%s\" to dss dir \"%s\": %s", link_path, path, + strerror(errno)); + } + return true; + } else { + return false; + } +} + bool ss_create_if_doublewrite(pgFile* dir, const char* vgdata, int instance_id) { - char ss_doublewrite[MAXPGPATH];; + char ss_doublewrite[MAXPGPATH]; errno_t rc = sprintf_s(ss_doublewrite, sizeof(ss_doublewrite), "%s%d", "pg_doublewrite", instance_id); securec_check_ss_c(rc, "\0", "\0"); if (pg_strcasecmp(dir->rel_path, ss_doublewrite) == 0) {