[CP] fix autoinc not refresh location cache for some error code
This commit is contained in:
@ -159,13 +159,16 @@ int ObTabletAutoincMgr::fetch_new_range(const ObTabletAutoincParam ¶m,
|
|||||||
} else {
|
} else {
|
||||||
finish = true;
|
finish = true;
|
||||||
}
|
}
|
||||||
if (OB_FAIL(ret) && is_retryable(ret)) {
|
if (OB_FAIL(ret)) {
|
||||||
const bool need_refresh_leader = OB_NOT_MASTER == ret || OB_LS_NOT_EXIST == ret || OB_TABLET_NOT_EXIST == 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<common::ObWaitEventIds::STORAGE_AUTOINC_FETCH_RETRY_SLEEP>(RETRY_INTERVAL);
|
ob_usleep<common::ObWaitEventIds::STORAGE_AUTOINC_FETCH_RETRY_SLEEP>(RETRY_INTERVAL);
|
||||||
res.reset();
|
res.reset();
|
||||||
if (OB_FAIL(THIS_WORKER.check_status())) { // overwrite ret
|
if (OB_FAIL(THIS_WORKER.check_status())) { // overwrite ret
|
||||||
LOG_WARN("failed to check status", K(ret));
|
LOG_WARN("failed to check status", K(ret));
|
||||||
} else if (need_refresh_leader) {
|
}
|
||||||
|
}
|
||||||
|
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_))) {
|
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));
|
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,
|
} 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))) {
|
leader_addr))) {
|
||||||
LOG_WARN("force get leader failed", K(ret), K(ret), K(arg.ls_id_));
|
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*/);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -80,7 +80,7 @@ private:
|
|||||||
}
|
}
|
||||||
bool is_retryable(int ret)
|
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:
|
private:
|
||||||
static const int64_t PREFETCH_THRESHOLD = 4;
|
static const int64_t PREFETCH_THRESHOLD = 4;
|
||||||
|
|||||||
Reference in New Issue
Block a user