ss probackup适配double write initdb的调整
This commit is contained in:
@ -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 */
|
||||
|
@ -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);
|
||||
|
@ -560,9 +560,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 +568,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 +594,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.
|
||||
|
Reference in New Issue
Block a user