Skip to content

Commit a1620e9

Browse files
committed
add fail path test
Signed-off-by: cfzjywxk <lsswxrxr@163.com>
1 parent ee20ca9 commit a1620e9

File tree

1 file changed

+30
-4
lines changed

1 file changed

+30
-4
lines changed

internal/locate/region_request3_test.go

+30-4
Original file line numberDiff line numberDiff line change
@@ -1066,27 +1066,40 @@ func (s *testRegionRequestToThreeStoresSuite) TestStaleReadFallback() {
10661066
s.Nil(err)
10671067
s.NotNil(regionLoc)
10681068
value := []byte("value")
1069-
isFirstReq := true
10701069

1070+
type testState struct {
1071+
tryTimes uint8
1072+
succ bool
1073+
}
1074+
1075+
state := &testState{}
10711076
s.regionRequestSender.client = &fnClient{fn: func(ctx context.Context, addr string, req *tikvrpc.Request, timeout time.Duration) (response *tikvrpc.Response, err error) {
10721077
select {
10731078
case <-ctx.Done():
10741079
return nil, errors.New("timeout")
10751080
default:
10761081
}
10771082
// Return `DataIsNotReady` for the first time on leader.
1078-
if isFirstReq {
1079-
isFirstReq = false
1083+
if state.tryTimes == 0 {
1084+
state.tryTimes++
10801085
return &tikvrpc.Response{Resp: &kvrpcpb.GetResponse{RegionError: &errorpb.Error{
10811086
DataIsNotReady: &errorpb.DataIsNotReady{},
10821087
}}}, nil
1088+
} else if state.tryTimes == 1 && state.succ {
1089+
state.tryTimes++
1090+
return &tikvrpc.Response{Resp: &kvrpcpb.GetResponse{Value: value}}, nil
10831091
}
1084-
return &tikvrpc.Response{Resp: &kvrpcpb.GetResponse{Value: value}}, nil
1092+
state.tryTimes++
1093+
return &tikvrpc.Response{Resp: &kvrpcpb.GetResponse{RegionError: &errorpb.Error{
1094+
DiskFull: &errorpb.DiskFull{},
1095+
}}}, nil
10851096
}}
10861097

10871098
region := s.cache.getRegionByIDFromCache(regionLoc.Region.GetID())
10881099
s.True(region.isValid())
10891100

1101+
// Test the successful path.
1102+
state.succ = true
10901103
req := tikvrpc.NewReplicaReadRequest(tikvrpc.CmdGet, &kvrpcpb.GetRequest{Key: []byte("key")}, kv.ReplicaReadLeader, nil)
10911104
req.ReadReplicaScope = oracle.GlobalTxnScope
10921105
req.TxnScope = oracle.GlobalTxnScope
@@ -1107,4 +1120,17 @@ func (s *testRegionRequestToThreeStoresSuite) TestStaleReadFallback() {
11071120
getResp, ok := resp.Resp.(*kvrpcpb.GetResponse)
11081121
s.True(ok)
11091122
s.Equal(getResp.Value, value)
1123+
1124+
// Test the fail path leader retry limit is reached, epoch not match error would be returned.
1125+
state.tryTimes = 0
1126+
state.succ = false
1127+
req.EnableStaleRead()
1128+
resp, _, _, err = s.regionRequestSender.SendReqCtx(bo, req, regionLoc.Region, time.Second, tikvrpc.TiKV, ops...)
1129+
s.Nil(err)
1130+
1131+
regionErr, err = resp.GetRegionError()
1132+
s.Nil(err)
1133+
s.NotNil(regionErr)
1134+
s.NotNil(regionErr.GetEpochNotMatch())
1135+
s.Nil(regionErr.GetDiskFull())
11101136
}

0 commit comments

Comments
 (0)