From a466529923410d0f9a2b61d8242503123f8c89ae Mon Sep 17 00:00:00 2001 From: obdev Date: Wed, 28 Jun 2023 09:42:13 +0000 Subject: [PATCH] fix refts rollback --- src/rootserver/ob_tenant_role_transition_service.cpp | 11 +++++++---- src/rootserver/ob_tenant_role_transition_service.h | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/rootserver/ob_tenant_role_transition_service.cpp b/src/rootserver/ob_tenant_role_transition_service.cpp index d5d6053e3d..8aadbd45b4 100644 --- a/src/rootserver/ob_tenant_role_transition_service.cpp +++ b/src/rootserver/ob_tenant_role_transition_service.cpp @@ -397,7 +397,7 @@ int ObTenantRoleTransitionService::do_switch_access_mode_to_append( ret = OB_INVALID_ARGUMENT; LOG_WARN("tenant switchover status not valid", KR(ret), K(tenant_info), K(target_tenant_role), K(switchover_epoch_)); - } else if (OB_FAIL(get_tenant_ref_scn_(ref_scn))) { + } else if (OB_FAIL(get_tenant_ref_scn_(tenant_info.get_sync_scn(), ref_scn))) { LOG_WARN("failed to get tenant ref_scn", KR(ret)); //TODO(yaoying):xianming } else if (OB_FAIL(change_ls_access_mode_(access_mode, ref_scn))) { @@ -438,12 +438,15 @@ int ObTenantRoleTransitionService::do_switch_access_mode_to_append( return ret; } -int ObTenantRoleTransitionService::get_tenant_ref_scn_(share::SCN &ref_scn) +int ObTenantRoleTransitionService::get_tenant_ref_scn_(const share::SCN &sync_scn, share::SCN &ref_scn) { int ret = OB_SUCCESS; ObTimeoutCtx ctx; - ref_scn.set_min(); - if (OB_FAIL(check_inner_stat())) { + ref_scn = sync_scn; + if (!sync_scn.is_valid_and_not_min()) { + ret = OB_INVALID_ARGUMENT; + LOG_WARN("invalid argument", KR(ret), K(sync_scn)); + } else if (OB_FAIL(check_inner_stat())) { LOG_WARN("error unexpected", KR(ret), K(tenant_id_), KP(sql_proxy_), KP(rpc_proxy_)); } else if (OB_FAIL(ObShareUtil::set_default_timeout_ctx(ctx, GCONF.internal_sql_execute_timeout))) { LOG_WARN("failed to set default timeout", KR(ret)); diff --git a/src/rootserver/ob_tenant_role_transition_service.h b/src/rootserver/ob_tenant_role_transition_service.h index 0852090ac0..720a9150e8 100644 --- a/src/rootserver/ob_tenant_role_transition_service.h +++ b/src/rootserver/ob_tenant_role_transition_service.h @@ -120,7 +120,7 @@ public: int do_switch_access_mode_to_append(const share::ObAllTenantInfo &tenant_info, const share::ObTenantRole &target_tenant_role); int do_switch_access_mode_to_raw_rw(const share::ObAllTenantInfo &tenant_info); - int get_tenant_ref_scn_(share::SCN &ref_scn); + int get_tenant_ref_scn_(const share::SCN &sync_scn, share::SCN &ref_scn); //before primary tenant switchover to standby, must set sys LS's sync_scn to lastest int report_sys_ls_sync_scn_(); void set_switchover_epoch(const int64_t switchover_epoch)