ssinitdb回合5.0

This commit is contained in:
chenzhikai
2023-10-11 18:47:48 +08:00
parent 073195ab1f
commit 6586a1ddff
4 changed files with 28 additions and 11 deletions

View File

@ -302,9 +302,9 @@ void ss_createdir(const char **ss_dirs, int32 num, int32 node_id, const char *pg
char *link_path = NULL;
if (vglog_dir[0] != '\0' && (pg_strcasecmp(ss_dirs[i], "+pg_xlog") == 0 ||
pg_strcasecmp(ss_dirs[i], "+pg_doublewrite") == 0 ||
pg_strcasecmp(ss_dirs[i], "+pg_notify") == 0 ||
pg_strcasecmp(ss_dirs[i], "+pg_snapshots") == 0)) {
pg_strcasecmp(ss_dirs[i], "+pg_snapshots") == 0 ||
pg_strcasecmp(ss_dirs[i], "+pg_replication") == 0)) {
is_xlog = true;
}

View File

@ -1312,10 +1312,15 @@ create_data_directories(parray *dest_files, const char *data_dir, const char *ba
if (dir->external_dir_num != 0)
continue;
if (is_dss_type(dir->type) && is_ss_xlog(dir->rel_path)) {
ss_createdir(dir->rel_path, instance_config.dss.vgdata,
instance_config.dss.vglog);
continue;
if (is_dss_type(dir->type)) {
if (is_ss_xlog(dir->rel_path)) {
ss_createdir(dir->rel_path, instance_config.dss.vgdata, instance_config.dss.vglog);
continue;
}
if (ss_create_if_doublewrite(dir, instance_config.dss.vgdata, instance_config.dss.instance_id)) {
continue;
}
}
/* tablespace_map exists */

View File

@ -390,6 +390,7 @@ extern void get_redo(const char *pgdata_path, RedoParams *redo);
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 char* xstrdup(const char* s);
extern void set_min_recovery_point(pgFile *file, const char *fullpath,
XLogRecPtr stop_backup_lsn);

View File

@ -551,7 +551,6 @@ bool
is_ss_xlog(const char *ss_dir)
{
char ss_xlog[MAXPGPATH] = {0};
char ss_doublewrite[MAXPGPATH] = {0};
char ss_notify[MAXPGPATH] = {0};
char ss_snapshots[MAXPGPATH] = {0};
int rc = EOK;
@ -560,9 +559,6 @@ is_ss_xlog(const char *ss_dir)
rc = sprintf_s(ss_xlog, sizeof(ss_xlog), "%s%d", "pg_xlog", instance_id);
securec_check_ss_c(rc, "\0", "\0");
rc = sprintf_s(ss_doublewrite, sizeof(ss_doublewrite), "%s%d", "pg_doublewrite", instance_id);
securec_check_ss_c(rc, "\0", "\0");
rc = sprintf_s(ss_notify, sizeof(ss_notify), "%s%d", "pg_notify", instance_id);
securec_check_ss_c(rc, "\0", "\0");
@ -571,7 +567,6 @@ is_ss_xlog(const char *ss_dir)
if (IsDssMode() && strlen(instance_config.dss.vglog) &&
(pg_strcasecmp(ss_dir, ss_xlog) == 0 ||
pg_strcasecmp(ss_dir, ss_doublewrite) == 0 ||
pg_strcasecmp(ss_dir, ss_notify) == 0 ||
pg_strcasecmp(ss_dir, ss_notify) == 0)) {
return true;
@ -598,6 +593,22 @@ ss_createdir(const char *ss_dir, const char *vgdata, const char *vglog)
}
}
bool
ss_create_if_doublewrite(pgFile* dir, const char* vgdata, int instance_id)
{
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) {
rc = sprintf_s(ss_doublewrite, sizeof(ss_doublewrite), "%s/%s", vgdata, dir->rel_path);
securec_check_ss_c(rc, "\0", "\0");
dir_create_dir(ss_doublewrite, DIR_PERMISSION);
return true;
} else {
return false;
}
}
/*
* Rewrite minRecoveryPoint of pg_control in backup directory. minRecoveryPoint
* 'as-is' is not to be trusted.