From 5f5a2835707e8507aa63d43760dd3833efe0e4f6 Mon Sep 17 00:00:00 2001 From: Hongqin-Li Date: Fri, 20 Oct 2023 12:43:56 +0000 Subject: [PATCH] [CP] fix autoinc not refresh location cache for some error code --- src/share/ob_tablet_autoincrement_service.cpp | 19 ++++++++++++------- src/share/ob_tablet_autoincrement_service.h | 2 +- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/share/ob_tablet_autoincrement_service.cpp b/src/share/ob_tablet_autoincrement_service.cpp index a6d360057..051dc1b48 100644 --- a/src/share/ob_tablet_autoincrement_service.cpp +++ b/src/share/ob_tablet_autoincrement_service.cpp @@ -159,13 +159,16 @@ int ObTabletAutoincMgr::fetch_new_range(const ObTabletAutoincParam ¶m, } else { finish = true; } - if (OB_FAIL(ret) && is_retryable(ret)) { - const bool need_refresh_leader = OB_NOT_MASTER == ret || OB_LS_NOT_EXIST == ret || OB_TABLET_NOT_EXIST == ret; - ob_usleep(RETRY_INTERVAL); - res.reset(); - if (OB_FAIL(THIS_WORKER.check_status())) { // overwrite ret - LOG_WARN("failed to check status", K(ret)); - } else if (need_refresh_leader) { + if (OB_FAIL(ret)) { + const bool force_refresh_leader = OB_NOT_MASTER == ret || OB_LS_NOT_EXIST == ret || OB_TABLET_NOT_EXIST == ret || OB_TENANT_NOT_IN_SERVER == ret; + if (is_retryable(ret)) { + ob_usleep(RETRY_INTERVAL); + res.reset(); + if (OB_FAIL(THIS_WORKER.check_status())) { // overwrite ret + LOG_WARN("failed to check status", K(ret)); + } + } + if (OB_SUCC(ret) && force_refresh_leader) { if (OB_FAIL(location_service->get(param.tenant_id_, tablet_id, INT64_MAX/*expire_renew_time*/, is_cache_hit, arg.ls_id_))) { LOG_WARN("fail to get log stream id", K(ret), K(ret), K(tablet_id)); } else if (OB_FAIL(location_service->get_leader(GCONF.cluster_id, @@ -175,6 +178,8 @@ int ObTabletAutoincMgr::fetch_new_range(const ObTabletAutoincParam ¶m, leader_addr))) { LOG_WARN("force get leader failed", K(ret), K(ret), K(arg.ls_id_)); } + } else { + (void)location_service->renew_tablet_location(param.tenant_id_, tablet_id, ret, true/*is_nonblock*/); } } } diff --git a/src/share/ob_tablet_autoincrement_service.h b/src/share/ob_tablet_autoincrement_service.h index 9a057fd23..68552b477 100644 --- a/src/share/ob_tablet_autoincrement_service.h +++ b/src/share/ob_tablet_autoincrement_service.h @@ -80,7 +80,7 @@ private: } bool is_retryable(int ret) { - return OB_NOT_MASTER == ret || OB_NOT_INIT == ret || OB_TIMEOUT == ret || OB_EAGAIN == ret || OB_LS_NOT_EXIST == ret || OB_TABLET_NOT_EXIST == ret; + return OB_NOT_MASTER == ret || OB_NOT_INIT == ret || OB_TIMEOUT == ret || OB_EAGAIN == ret || OB_LS_NOT_EXIST == ret || OB_TABLET_NOT_EXIST == ret || OB_TENANT_NOT_IN_SERVER == ret; } private: static const int64_t PREFETCH_THRESHOLD = 4;