Signed-off-by: bufferflies <1045931706@qq.com>
This commit is contained in:
buffer 2023-09-26 13:16:11 +08:00 committed by GitHub
parent 44b0cf7aba
commit 4c2ae43454
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 3 deletions

View File

@ -358,6 +358,7 @@ func (r *Region) isCacheTTLExpired(ts int64) bool {
return ts-lastAccess > regionCacheTTLSec return ts-lastAccess > regionCacheTTLSec
} }
// checkRegionCacheTTL returns false means the region cache is expired.
func (r *Region) checkRegionCacheTTL(ts int64) bool { func (r *Region) checkRegionCacheTTL(ts int64) bool {
// Only consider use percentage on this failpoint, for example, "2%return" // Only consider use percentage on this failpoint, for example, "2%return"
if _, err := util.EvalFailpoint("invalidateRegionCache"); err == nil { if _, err := util.EvalFailpoint("invalidateRegionCache"); err == nil {

View File

@ -910,9 +910,14 @@ func newReplicaSelector(
regionCache *RegionCache, regionID RegionVerID, req *tikvrpc.Request, opts ...StoreSelectorOption, regionCache *RegionCache, regionID RegionVerID, req *tikvrpc.Request, opts ...StoreSelectorOption,
) (*replicaSelector, error) { ) (*replicaSelector, error) {
cachedRegion := regionCache.GetCachedRegionWithRLock(regionID) cachedRegion := regionCache.GetCachedRegionWithRLock(regionID)
if cachedRegion == nil || !cachedRegion.isValid() { if cachedRegion == nil {
return nil, nil return nil, errors.New("cached region not found")
} else if cachedRegion.checkNeedReload() {
return nil, errors.New("cached region need reload")
} else if !cachedRegion.checkRegionCacheTTL(time.Now().Unix()) {
return nil, errors.New("cached region ttl expired")
} }
regionStore := cachedRegion.getStore() regionStore := cachedRegion.getStore()
replicas := make([]*replica, 0, regionStore.accessStoreNum(tiKVOnly)) replicas := make([]*replica, 0, regionStore.accessStoreNum(tiKVOnly))
for _, storeIdx := range regionStore.accessIndex[tiKVOnly] { for _, storeIdx := range regionStore.accessIndex[tiKVOnly] {
@ -1274,7 +1279,8 @@ func (s *RegionRequestSender) getRPCContext(
if s.replicaSelector == nil { if s.replicaSelector == nil {
selector, err := newReplicaSelector(s.regionCache, regionID, req, opts...) selector, err := newReplicaSelector(s.regionCache, regionID, req, opts...)
if selector == nil || err != nil { if selector == nil || err != nil {
return nil, err s.rpcError = err
return nil, nil
} }
s.replicaSelector = selector s.replicaSelector = selector
} }