支持资源池化单集群升级双集群

This commit is contained in:
chenzhikai
2023-10-12 11:52:50 +08:00
parent 10c3fa75b8
commit a642f8bdb3
4 changed files with 28 additions and 2 deletions

View File

@ -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 */

View File

@ -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 */

View File

@ -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);

View File

@ -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) {