From 58150acb769e1e61f5bd47269501a2896cbc2816 Mon Sep 17 00:00:00 2001 From: you06 Date: Mon, 29 May 2023 14:42:14 +0800 Subject: [PATCH] disable stale read when meeting lock for cop Signed-off-by: you06 --- go.mod | 4 ++-- go.sum | 8 ++++---- store/copr/coprocessor.go | 7 ++++++- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/go.mod b/go.mod index 6e468a42555d6..0b2d566184d87 100644 --- a/go.mod +++ b/go.mod @@ -74,7 +74,7 @@ require ( github.com/pingcap/errors v0.11.5-0.20221009092201-b66cddb77c32 github.com/pingcap/failpoint v0.0.0-20220801062533-2eaa32854a6c github.com/pingcap/fn v0.0.0-20200306044125-d5540d389059 - github.com/pingcap/kvproto v0.0.0-20230426023724-d90a321b46be + github.com/pingcap/kvproto v0.0.0-20230523065550-8b641fa69bf3 github.com/pingcap/log v1.1.1-0.20230317032135-a0d097d16e22 github.com/pingcap/sysutil v1.0.1-0.20230407040306-fb007c5aff21 github.com/pingcap/tidb/parser v0.0.0-20211011031125-9b13dc409c5e @@ -95,7 +95,7 @@ require ( github.com/stretchr/testify v1.8.3 github.com/tdakkota/asciicheck v0.2.0 github.com/tiancaiamao/appdash v0.0.0-20181126055449-889f96f722a2 - github.com/tikv/client-go/v2 v2.0.8-0.20230524032653-1b2876693630 + github.com/tikv/client-go/v2 v2.0.8-0.20230526055553-11121c6913c9 github.com/tikv/pd/client v0.0.0-20230419153320-f1d1a80feb95 github.com/timakin/bodyclose v0.0.0-20230421092635-574207250966 github.com/twmb/murmur3 v1.1.6 diff --git a/go.sum b/go.sum index 912e14349fdee..5fbad82536f25 100644 --- a/go.sum +++ b/go.sum @@ -789,8 +789,8 @@ github.com/pingcap/fn v0.0.0-20200306044125-d5540d389059/go.mod h1:fMRU1BA1y+r89 github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 h1:surzm05a8C9dN8dIUmo4Be2+pMRb6f55i+UIYrluu2E= github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989/go.mod h1:O17XtbryoCJhkKGbT62+L2OlrniwqiGLSqrmdHCMzZw= github.com/pingcap/kvproto v0.0.0-20191211054548-3c6b38ea5107/go.mod h1:WWLmULLO7l8IOcQG+t+ItJ3fEcrL5FxF0Wu+HrMy26w= -github.com/pingcap/kvproto v0.0.0-20230426023724-d90a321b46be h1:eHtwHgPzzm8aIZ4x8o7zg1b23cjUl0AikW+SDLpqf3E= -github.com/pingcap/kvproto v0.0.0-20230426023724-d90a321b46be/go.mod h1:guCyM5N+o+ru0TsoZ1hi9lDjUMs2sIBjW3ARTEpVbnk= +github.com/pingcap/kvproto v0.0.0-20230523065550-8b641fa69bf3 h1:iAIjJVgrPuXjpAiMDcJvz4Y4Qf4KypiCsqy3UVzU6FQ= +github.com/pingcap/kvproto v0.0.0-20230523065550-8b641fa69bf3/go.mod h1:guCyM5N+o+ru0TsoZ1hi9lDjUMs2sIBjW3ARTEpVbnk= github.com/pingcap/log v0.0.0-20191012051959-b742a5d432e9/go.mod h1:4rbK1p9ILyIfb6hU7OG2CiWSqMXnp3JMbiaVJ6mvoY8= github.com/pingcap/log v0.0.0-20210625125904-98ed8e2eb1c7/go.mod h1:8AanEdAHATuRurdGxZXBz0At+9avep+ub7U1AGYLIMM= github.com/pingcap/log v1.1.0/go.mod h1:DWQW5jICDR7UJh4HtxXSM20Churx4CQL0fwL/SoOSA4= @@ -966,8 +966,8 @@ github.com/tiancaiamao/appdash v0.0.0-20181126055449-889f96f722a2 h1:mbAskLJ0oJf github.com/tiancaiamao/appdash v0.0.0-20181126055449-889f96f722a2/go.mod h1:2PfKggNGDuadAa0LElHrByyrz4JPZ9fFx6Gs7nx7ZZU= github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a h1:J/YdBZ46WKpXsxsW93SG+q0F8KI+yFrcIDT4c/RNoc4= github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a/go.mod h1:h4xBhSNtOeEosLJ4P7JyKXX7Cabg7AVkWCK5gV2vOrM= -github.com/tikv/client-go/v2 v2.0.8-0.20230524032653-1b2876693630 h1:uMwa1WlF51WU3capFUiTHjn7U71wiPHyRmdkde7GWlA= -github.com/tikv/client-go/v2 v2.0.8-0.20230524032653-1b2876693630/go.mod h1:XgUt8nFfG23jaEPlF+rRVUwSjSE/Aozi0LYRWzt1ar8= +github.com/tikv/client-go/v2 v2.0.8-0.20230526055553-11121c6913c9 h1:3w2pCPywuFJYY5gt39BIY3n0QEhK3R4FsAlKmLtfieY= +github.com/tikv/client-go/v2 v2.0.8-0.20230526055553-11121c6913c9/go.mod h1:bQtijg8EtFeW0VQGU3YCAkQlAQ6PL2UPWhr4Rm2ItDY= github.com/tikv/pd/client v0.0.0-20230419153320-f1d1a80feb95 h1:177X/S43/qjxDyFq9CBB4Nts0nwLvjJFXzoav2XCUSA= github.com/tikv/pd/client v0.0.0-20230419153320-f1d1a80feb95/go.mod h1:5vgcvO020ZCdMZkTrRdS/wFZQUab82BSfKE38T61ro0= github.com/timakin/bodyclose v0.0.0-20230421092635-574207250966 h1:quvGphlmUVU+nhpFa4gg4yJyTRJ13reZMDHrKwYw53M= diff --git a/store/copr/coprocessor.go b/store/copr/coprocessor.go index 4082adb412177..d4fe77f3e616f 100644 --- a/store/copr/coprocessor.go +++ b/store/copr/coprocessor.go @@ -265,6 +265,7 @@ type copTask struct { // we set this field to the target replica store ID and redirect the request to the replica. redirect2Replica *uint64 busyThreshold time.Duration + meetLockFallback bool } type batchedCopTask struct { @@ -1172,7 +1173,9 @@ func (worker *copIteratorWorker) handleTaskOnce(bo *Backoffer, task *copTask, ch // set ReadReplicaScope and TxnScope so that req.IsStaleRead will be true when it's a global scope stale read. req.ReadReplicaScope = worker.req.ReadReplicaScope req.TxnScope = worker.req.TxnScope - if worker.req.IsStaleness { + if task.meetLockFallback { + req.DisableStaleReadMeetLock() + } else if worker.req.IsStaleness { req.EnableStaleRead() } staleRead := req.GetStaleRead() @@ -1337,6 +1340,7 @@ func (worker *copIteratorWorker) handleCopResponse(bo *Backoffer, rpcCtx *tikv.R if err := worker.handleLockErr(bo, lockErr, task); err != nil { return nil, err } + task.meetLockFallback = true return worker.handleBatchRemainsOnErr(bo, rpcCtx, []*copTask{task}, resp.pbResp, task, ch) } if otherErr := resp.pbResp.GetOtherError(); otherErr != "" { @@ -1464,6 +1468,7 @@ func (worker *copIteratorWorker) handleBatchCopResponse(bo *Backoffer, rpcCtx *t if err := worker.handleLockErr(bo, resp.pbResp.GetLocked(), task); err != nil { return nil, err } + task.meetLockFallback = true appendRemainTasks(task) continue }