mirror of https://github.com/tikv/client-go.git
parent
44b0cf7aba
commit
4c2ae43454
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue