using backup time zone to analysis restore time stamp

This commit is contained in:
hamstersox
2023-07-24 03:12:37 +00:00
committed by ob-robot
parent 86fa74323f
commit ae729891e5
13 changed files with 368 additions and 147 deletions

View File

@ -77,7 +77,7 @@ bool ObBackupDeletedTabletToLSDesc::is_valid() const
*------------------------------ObExternTenantLocalityInfo----------------------------
*/
OB_SERIALIZE_MEMBER(ObExternTenantLocalityInfoDesc, tenant_id_, backup_set_id_, cluster_id_, compat_mode_,
tenant_name_, cluster_name_, locality_, primary_zone_, sys_time_zone_);
tenant_name_, cluster_name_, locality_, primary_zone_, sys_time_zone_, sys_time_zone_wrap_);
bool ObExternTenantLocalityInfoDesc::is_valid() const
{
@ -188,7 +188,8 @@ int ObBackupSetFilter::func(const dirent *entry)
const char *end_success_str = "end_success";
const char *backup_set_str = "backup_set";
const char *find_pos = nullptr;
if (!bs_placeholder_name.prefix_match(backup_set_str)) {
if (backup_set_name_array_.count() >= OB_MAX_BACKUP_SET_NUM) { // list upper limit //TODO(chongrong.th) add new error code
} else if (!bs_placeholder_name.prefix_match(backup_set_str)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("invalid backup set dier prefix", K(ret), K(bs_placeholder_name));
} else if (OB_ISNULL(find_pos = STRSTR(bs_placeholder_name.ptr(), end_success_str))) {
@ -831,6 +832,78 @@ int ObBackupDataStore::get_max_backup_set_file_info(const common::ObString &pass
return ret;
}
int ObBackupDataStore::get_backup_sys_time_zone_wrap(common::ObTimeZoneInfoWrap & time_zone_wrap)
{
int ret = OB_SUCCESS;
if (!is_init()) {
ret = OB_NOT_INIT;
LOG_WARN("ObBackupDataStore not init", K(ret));
} else {
ObBackupIoAdapter util;
ObBackupSetFilter op;
share::ObBackupPath tenant_backup_placeholder_dir_path;
const ObBackupStorageInfo *storage_info = get_storage_info();
op.reset();
ObSArray<share::ObBackupSetDesc> backup_set_desc_array;
if (OB_FAIL(share::ObBackupPathUtil::get_backup_sets_dir_path(get_backup_dest(),
tenant_backup_placeholder_dir_path))) {
LOG_WARN("fail to get simple backup placeholder dir", K(ret));
} else if (OB_FAIL(util.list_files(tenant_backup_placeholder_dir_path.get_obstr(), storage_info, op))) {
LOG_WARN("fail to list files", K(ret), K(tenant_backup_placeholder_dir_path));
} else if (OB_FAIL(op.get_backup_set_array(backup_set_desc_array))) {
LOG_WARN("fail to get backup set name array", K(ret), K(op));
} else {
ObBackupSetDescComparator cmp;
HEAP_VARS_2((storage::ObExternTenantLocalityInfoDesc, locality_info),
(storage::ObExternBackupSetInfoDesc, backup_set_info)) {
std::sort(backup_set_desc_array.begin(), backup_set_desc_array.end(), cmp);
for (int64_t i = backup_set_desc_array.count() - 1; OB_SUCC(ret) && i >= 0; i--) {
const share::ObBackupSetDesc &backup_set_desc = backup_set_desc_array.at(i);
backup_desc_.backup_set_id_ = backup_set_desc.backup_set_id_;
backup_desc_.backup_type_.type_ = backup_set_desc.backup_type_.type_;
backup_set_dest_.reset();
if (OB_FAIL(ObBackupPathUtil::construct_backup_set_dest(
get_backup_dest(), backup_desc_, backup_set_dest_))) {
LOG_WARN("fail to construct backup set dest", K(ret));
} else if (OB_FAIL(read_tenant_locality_info(locality_info))) {
if (OB_BACKUP_FILE_NOT_EXIST == ret) {
LOG_WARN("backup set info not exist", K(ret), K(backup_set_desc));
ret = OB_SUCCESS;
continue;
} else {
LOG_WARN("fail to read backup set info", K(ret), K(backup_set_desc));
}
} else if (OB_FAIL(read_backup_set_info(backup_set_info))) {
if (OB_BACKUP_FILE_NOT_EXIST == ret) {
LOG_WARN("backup set info not exist", K(ret), K(backup_set_desc));
ret = OB_SUCCESS;
continue;
} else {
LOG_WARN("fail to read backup set info", K(ret), K(backup_set_desc));
}
} else if (backup_set_info.backup_set_file_.tenant_compatible_ < DATA_VERSION_4_2_0_0) {
const char *time_zone = "+08:00";
int32_t offset = 0;
int ret_more = OB_SUCCESS;
bool is_oracle_mode = locality_info.compat_mode_ == lib::Worker::CompatMode::ORACLE;
if (OB_FAIL(ObTimeConverter::str_to_offset(time_zone,
offset,
ret_more,
is_oracle_mode))) {
LOG_WARN("invalid time zone offset", K(ret), K(time_zone), K(offset), K(is_oracle_mode));
} else {
time_zone_wrap.set_tz_info_offset(offset);
}
} else if (OB_FAIL(time_zone_wrap.deep_copy(locality_info.sys_time_zone_wrap_))) {
LOG_WARN("failed to deep copy time zone wrap", K(ret), K(locality_info));
}
}
}
}
}
return ret;
}
int ObBackupDataStore::do_get_backup_set_array_(const common::ObString &passwd_array,
const SCN &restore_scn, const ObBackupSetFilter &op,
common::ObIArray<share::ObRestoreBackupSetBriefInfo> &tmp_backup_set_list,

View File

@ -306,6 +306,7 @@ public:
int get_backup_set_array(const common::ObString &passwd_array, const share::SCN &restore_scn,
share::SCN &restore_start_scn, common::ObIArray<share::ObRestoreBackupSetBriefInfo> &backup_set_list);
int get_max_backup_set_file_info(const common::ObString &passwd_array, ObBackupSetFileDesc &output_desc);
int get_backup_sys_time_zone_wrap(common::ObTimeZoneInfoWrap & time_zone_wrap);
int get_max_sys_ls_retry_id(
const share::ObBackupPath &backup_path, const share::ObLSID &ls_id, const int64_t turn_id, int64_t &retry_id);
int write_root_key_info(const uint64_t tenant_id);

View File

@ -357,7 +357,7 @@ int ObLSBackupMetaDagNet::start_running()
} else if (OB_ISNULL(dag_scheduler = MTL(ObTenantDagScheduler *))) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("dag scheduler must not be NULL", K(ret));
} else if (param_.convert_to(init_param)) {
} else if (OB_FAIL(param_.convert_to(init_param))) {
LOG_WARN("failed to convert to init param", K(ret));
} else if (OB_FALSE_IT(init_param.backup_stage_ = start_stage_)) {
} else if (OB_FAIL(inner_init_before_run_())) {