ss probackup适配double write initdb的调整

This commit is contained in:
chenzhikai
2023-09-23 11:24:53 +08:00
parent 6535af85f7
commit 33c9b4eb06
3 changed files with 26 additions and 8 deletions

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

@ -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.