replayable_scn = min(new_relayable, new_readable+gap)
This commit is contained in:
@ -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) {
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -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
|
||||
|
||||
Reference in New Issue
Block a user