mirror of https://github.com/tikv/client-go.git
* Revert "dco (#988)"
This reverts commit 4c2ae43454.
Signed-off-by: crazycs520 <crazycs520@gmail.com>
* add comment
Signed-off-by: crazycs520 <crazycs520@gmail.com>
---------
Signed-off-by: crazycs520 <crazycs520@gmail.com>
This commit is contained in:
parent
4183ab10fa
commit
f9591044f1
|
|
@ -1015,14 +1015,9 @@ 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 {
|
if cachedRegion == nil || !cachedRegion.isValid() {
|
||||||
return nil, errors.New("cached region not found")
|
return nil, nil
|
||||||
} else if cachedRegion.checkSyncFlags(needReloadOnAccess) {
|
|
||||||
return nil, errors.New("cached region need reload")
|
|
||||||
} else if !cachedRegion.checkRegionCacheTTL(time.Now().Unix()) {
|
|
||||||
return nil, errors.New("cached region ttl expired")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
replicas := buildTiKVReplicas(cachedRegion)
|
replicas := buildTiKVReplicas(cachedRegion)
|
||||||
regionStore := cachedRegion.getStore()
|
regionStore := cachedRegion.getStore()
|
||||||
option := storeSelectorOp{}
|
option := storeSelectorOp{}
|
||||||
|
|
@ -1066,6 +1061,10 @@ func newReplicaSelector(
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *replicaSelector) isValid() bool {
|
||||||
|
return s != nil
|
||||||
|
}
|
||||||
|
|
||||||
func buildTiKVReplicas(region *Region) []*replica {
|
func buildTiKVReplicas(region *Region) []*replica {
|
||||||
regionStore := region.getStore()
|
regionStore := region.getStore()
|
||||||
replicas := make([]*replica, 0, regionStore.accessStoreNum(tiKVOnly))
|
replicas := make([]*replica, 0, regionStore.accessStoreNum(tiKVOnly))
|
||||||
|
|
@ -1423,10 +1422,9 @@ func (s *RegionRequestSender) getRPCContext(
|
||||||
switch et {
|
switch et {
|
||||||
case tikvrpc.TiKV:
|
case tikvrpc.TiKV:
|
||||||
if s.replicaSelector == nil {
|
if s.replicaSelector == nil {
|
||||||
selector, err := NewReplicaSelector(s.regionCache, regionID, req, opts...)
|
selector, err := NewReplicaSelector(s.regionCache, regionID, req, opts...) //nolint:staticcheck // ignore SA4023, never returns a nil interface value
|
||||||
if err != nil {
|
if selector == nil || !selector.isValid() || err != nil { //nolint:staticcheck // ignore SA4023, never returns a nil interface value
|
||||||
s.rpcError = err
|
return nil, err
|
||||||
return nil, nil
|
|
||||||
}
|
}
|
||||||
s.replicaSelector = selector
|
s.replicaSelector = selector
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -826,5 +826,5 @@ func (s *testRegionRequestToSingleStoreSuite) TestRegionRequestSenderString() {
|
||||||
// invalid region cache before sending request.
|
// invalid region cache before sending request.
|
||||||
s.cache.InvalidateCachedRegion(loc.Region)
|
s.cache.InvalidateCachedRegion(loc.Region)
|
||||||
sender.SendReqCtx(s.bo, tikvrpc.NewRequest(tikvrpc.CmdGet, &kvrpcpb.GetRequest{}), loc.Region, time.Second, tikvrpc.TiKV)
|
sender.SendReqCtx(s.bo, tikvrpc.NewRequest(tikvrpc.CmdGet, &kvrpcpb.GetRequest{}), loc.Region, time.Second, tikvrpc.TiKV)
|
||||||
s.Equal("{rpcError:cached region invalid, replicaSelector: <nil>}", sender.String())
|
s.Equal("{rpcError:<nil>, replicaSelector: <nil>}", sender.String())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -44,9 +44,12 @@ type ReplicaSelector interface {
|
||||||
onDataIsNotReady()
|
onDataIsNotReady()
|
||||||
onServerIsBusy(bo *retry.Backoffer, ctx *RPCContext, req *tikvrpc.Request, serverIsBusy *errorpb.ServerIsBusy) (shouldRetry bool, err error)
|
onServerIsBusy(bo *retry.Backoffer, ctx *RPCContext, req *tikvrpc.Request, serverIsBusy *errorpb.ServerIsBusy) (shouldRetry bool, err error)
|
||||||
onReadReqConfigurableTimeout(req *tikvrpc.Request) bool
|
onReadReqConfigurableTimeout(req *tikvrpc.Request) bool
|
||||||
|
isValid() bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewReplicaSelector returns a new ReplicaSelector.
|
// NewReplicaSelector returns a new ReplicaSelector.
|
||||||
|
//
|
||||||
|
//nolint:staticcheck // ignore SA4023, never returns a nil interface value
|
||||||
func NewReplicaSelector(
|
func NewReplicaSelector(
|
||||||
regionCache *RegionCache, regionID RegionVerID, req *tikvrpc.Request, opts ...StoreSelectorOption,
|
regionCache *RegionCache, regionID RegionVerID, req *tikvrpc.Request, opts ...StoreSelectorOption,
|
||||||
) (ReplicaSelector, error) {
|
) (ReplicaSelector, error) {
|
||||||
|
|
@ -72,7 +75,7 @@ func newReplicaSelectorV2(
|
||||||
) (*replicaSelectorV2, error) {
|
) (*replicaSelectorV2, error) {
|
||||||
cachedRegion := regionCache.GetCachedRegionWithRLock(regionID)
|
cachedRegion := regionCache.GetCachedRegionWithRLock(regionID)
|
||||||
if cachedRegion == nil || !cachedRegion.isValid() {
|
if cachedRegion == nil || !cachedRegion.isValid() {
|
||||||
return nil, errors.New("cached region invalid")
|
return nil, nil
|
||||||
}
|
}
|
||||||
replicas := buildTiKVReplicas(cachedRegion)
|
replicas := buildTiKVReplicas(cachedRegion)
|
||||||
option := storeSelectorOp{}
|
option := storeSelectorOp{}
|
||||||
|
|
@ -98,6 +101,10 @@ func newReplicaSelectorV2(
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *replicaSelectorV2) isValid() bool {
|
||||||
|
return s != nil
|
||||||
|
}
|
||||||
|
|
||||||
func (s *replicaSelectorV2) next(bo *retry.Backoffer, req *tikvrpc.Request) (rpcCtx *RPCContext, err error) {
|
func (s *replicaSelectorV2) next(bo *retry.Backoffer, req *tikvrpc.Request) (rpcCtx *RPCContext, err error) {
|
||||||
if !s.region.isValid() {
|
if !s.region.isValid() {
|
||||||
metrics.TiKVReplicaSelectorFailureCounter.WithLabelValues("invalid").Inc()
|
metrics.TiKVReplicaSelectorFailureCounter.WithLabelValues("invalid").Inc()
|
||||||
|
|
|
||||||
|
|
@ -119,10 +119,15 @@ func TestReplicaSelectorBasic(t *testing.T) {
|
||||||
s.NotNil(rc)
|
s.NotNil(rc)
|
||||||
rc.invalidate(Other)
|
rc.invalidate(Other)
|
||||||
selector, err := newReplicaSelectorV2(s.cache, rc.VerID(), req)
|
selector, err := newReplicaSelectorV2(s.cache, rc.VerID(), req)
|
||||||
s.NotNil(err)
|
s.Nil(err)
|
||||||
s.Equal("cached region invalid", err.Error())
|
|
||||||
s.Nil(selector)
|
s.Nil(selector)
|
||||||
s.Equal("", selector.String())
|
s.Equal("", selector.String())
|
||||||
|
selector2, err := NewReplicaSelector(s.cache, rc.VerID(), req)
|
||||||
|
s.Nil(err)
|
||||||
|
s.Nil(selector2)
|
||||||
|
s.False(selector2 == nil) // since never returns a nil interface value
|
||||||
|
s.False(selector2.isValid())
|
||||||
|
s.Equal("", selector2.String())
|
||||||
|
|
||||||
rc = s.getRegion()
|
rc = s.getRegion()
|
||||||
selector, err = newReplicaSelectorV2(s.cache, rc.VerID(), req)
|
selector, err = newReplicaSelectorV2(s.cache, rc.VerID(), req)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue