replayable_scn = min(new_relayable, new_readable+gap)

This commit is contained in:
linqiucen
2024-04-24 12:15:57 +00:00
committed by ob-robot
parent 0b39df787f
commit 471672c9f8
3 changed files with 33 additions and 0 deletions

View File

@ -450,6 +450,32 @@ int ObAllTenantInfoProxy::update_tenant_recovery_status_in_trans(
SCN new_replay_scn = gen_new_replayable_scn(old_tenant_info.get_replayable_scn(), replay_scn, new_sync_scn);
SCN new_scn = gen_new_standby_scn(old_tenant_info.get_standby_scn(), readable_scn, new_replay_scn);
omt::ObTenantConfigGuard tenant_config(TENANT_CONF(tenant_id));
if (OB_UNLIKELY(!tenant_config.is_valid())) {
LOG_WARN_RET(OB_ERR_UNEXPECTED, "tenant config is invalid", K(tenant_id));
} else {
const int64_t MAX_GAP = tenant_config->_standby_max_replay_gap_time * 1000;
SCN new_standby_scn_plus_gap = SCN::plus(new_scn, MAX_GAP);
if (REACH_TENANT_TIME_INTERVAL(10 * 1000 * 1000)) { // 10s
const int64_t REAL_GAP = new_replay_scn.get_val_for_gts() - new_scn.get_val_for_gts();
const bool IS_MAX_GAP_REACHED = REAL_GAP > MAX_GAP ? true : false;
LOG_INFO("tenant scn gap info", K(IS_MAX_GAP_REACHED), K(REAL_GAP), K(MAX_GAP), K(new_sync_scn),
K(new_replay_scn), K(new_scn), K(old_tenant_info));
}
if (old_tenant_info.is_standby()
&& new_replay_scn.is_valid()
&& new_standby_scn_plus_gap.is_valid()
&& new_replay_scn > new_standby_scn_plus_gap) {
if (new_standby_scn_plus_gap >= old_tenant_info.get_replayable_scn()
&& old_tenant_info.get_standby_scn() > SCN::base_scn()) {
// sys ls's readable_scn starts from base_scn
// replayable_scn cannot start from base_scn, it's too slow when restore tenant
// at the beginning time, replayable_scn should be sync_scn
new_replay_scn = new_standby_scn_plus_gap;
}
}
}
if (old_tenant_info.get_sync_scn() == new_sync_scn
&& old_tenant_info.get_replayable_scn() == new_replay_scn
&& old_tenant_info.get_standby_scn() == new_scn) {

View File

@ -1856,6 +1856,12 @@ DEF_MODE_WITH_PARSER(_obkv_feature_mode, OB_CLUSTER_PARAMETER, "", common::ObKvF
"_obkv_feature_mode is a option list to control specified OBKV features on/off.",
ObParameterAttr(Section::OBSERVER, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE));
DEF_TIME(_standby_max_replay_gap_time, OB_TENANT_PARAMETER, "900s", "[10s,)",
"The difference in replayable_scn between log streams on standby tenants is not greater than "
"_standby_max_replay_gap_time, and the gap between sync_scn and replayable_scn of each log stream "
"is kept reasonably small. Range: [10s, )",
ObParameterAttr(Section::TENANT, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE));
DEF_BOOL(_enable_optimizer_qualify_filter, OB_TENANT_PARAMETER, "True",
"Enable extracting qualify filters for window function",

View File

@ -428,6 +428,7 @@ _sort_area_size
_sqlexec_disable_hash_based_distagg_tiv
_sql_insert_multi_values_split_opt
_stall_threshold_for_dynamic_worker
_standby_max_replay_gap_time
_storage_leak_check_mod
_storage_meta_memory_limit_percentage
_stream_rpc_max_wait_timeout