From 359aea889031d08f7ac31b30d6115ef7cda4f729 Mon Sep 17 00:00:00 2001 From: Ti Chi Robot Date: Mon, 16 Oct 2023 16:15:28 +0800 Subject: [PATCH] client-go: attach request source with retry info for coprocessor (#46509) (#46705) close pingcap/tidb#46514 --- DEPS.bzl | 12 ++++++------ go.mod | 6 +++--- go.sum | 12 ++++++------ session/session.go | 3 +-- store/copr/coprocessor.go | 23 ++++++++++++++++++----- 5 files changed, 34 insertions(+), 22 deletions(-) diff --git a/DEPS.bzl b/DEPS.bzl index a36300c406568..7b9d7307da651 100644 --- a/DEPS.bzl +++ b/DEPS.bzl @@ -3420,8 +3420,8 @@ def go_deps(): name = "com_github_pingcap_kvproto", build_file_proto_mode = "disable_global", importpath = "github.com/pingcap/kvproto", - sum = "h1:iAIjJVgrPuXjpAiMDcJvz4Y4Qf4KypiCsqy3UVzU6FQ=", - version = "v0.0.0-20230523065550-8b641fa69bf3", + sum = "h1:so6ffMPEx9HYGOOi9T0ezTZlI7LvpYBUQyWWyz8kND8=", + version = "v0.0.0-20231011074246-fa00d2b03372", ) go_repository( name = "com_github_pingcap_log", @@ -4179,8 +4179,8 @@ def go_deps(): name = "com_github_tikv_client_go_v2", build_file_proto_mode = "disable_global", importpath = "github.com/tikv/client-go/v2", - sum = "h1:4BuoY88x2ejo8wpeGOnZmpHznZxTK6Zjsb6FDd5JKuc=", - version = "v2.0.8-0.20231011043713-4e9060a1dc67", + sum = "h1:rJGhMdMHG8EjdPhpNB6UejQwuE8rtSqBxBVvbiQHyrY=", + version = "v2.0.8-0.20231012084106-14934ce6283e", ) go_repository( name = "com_github_tikv_pd", @@ -4194,8 +4194,8 @@ def go_deps(): name = "com_github_tikv_pd_client", build_file_proto_mode = "disable_global", importpath = "github.com/tikv/pd/client", - sum = "h1:pKIvLrqEmTMw+J8wwdv4r2QTp+cjW9giiOIyaRy9mLM=", - version = "v0.0.0-20230905092614-113cdedbebb6", + sum = "h1:dO0YtekJ9IKiO9dXMZz0rNHPBiGCo+c37RUsnshoLwo=", + version = "v0.0.0-20230519121736-d15a686a670e", ) go_repository( name = "com_github_timakin_bodyclose", diff --git a/go.mod b/go.mod index 2b8ffcf1540ab..dc96ae38a1e0c 100644 --- a/go.mod +++ b/go.mod @@ -73,7 +73,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-20230523065550-8b641fa69bf3 + github.com/pingcap/kvproto v0.0.0-20231011074246-fa00d2b03372 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 @@ -94,8 +94,8 @@ require ( github.com/stretchr/testify v1.8.2 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.20231011043713-4e9060a1dc67 - github.com/tikv/pd/client v0.0.0-20230905092614-113cdedbebb6 + github.com/tikv/client-go/v2 v2.0.8-0.20231012084106-14934ce6283e + github.com/tikv/pd/client v0.0.0-20230519121736-d15a686a670e github.com/timakin/bodyclose v0.0.0-20221125081123-e39cf3fc478e github.com/twmb/murmur3 v1.1.6 github.com/uber/jaeger-client-go v2.22.1+incompatible diff --git a/go.sum b/go.sum index 37dda57524197..26d12ea8b01b8 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-20230523065550-8b641fa69bf3 h1:iAIjJVgrPuXjpAiMDcJvz4Y4Qf4KypiCsqy3UVzU6FQ= -github.com/pingcap/kvproto v0.0.0-20230523065550-8b641fa69bf3/go.mod h1:guCyM5N+o+ru0TsoZ1hi9lDjUMs2sIBjW3ARTEpVbnk= +github.com/pingcap/kvproto v0.0.0-20231011074246-fa00d2b03372 h1:so6ffMPEx9HYGOOi9T0ezTZlI7LvpYBUQyWWyz8kND8= +github.com/pingcap/kvproto v0.0.0-20231011074246-fa00d2b03372/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= @@ -964,10 +964,10 @@ 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.20231011043713-4e9060a1dc67 h1:4BuoY88x2ejo8wpeGOnZmpHznZxTK6Zjsb6FDd5JKuc= -github.com/tikv/client-go/v2 v2.0.8-0.20231011043713-4e9060a1dc67/go.mod h1:bQtijg8EtFeW0VQGU3YCAkQlAQ6PL2UPWhr4Rm2ItDY= -github.com/tikv/pd/client v0.0.0-20230905092614-113cdedbebb6 h1:pKIvLrqEmTMw+J8wwdv4r2QTp+cjW9giiOIyaRy9mLM= -github.com/tikv/pd/client v0.0.0-20230905092614-113cdedbebb6/go.mod h1:5vgcvO020ZCdMZkTrRdS/wFZQUab82BSfKE38T61ro0= +github.com/tikv/client-go/v2 v2.0.8-0.20231012084106-14934ce6283e h1:rJGhMdMHG8EjdPhpNB6UejQwuE8rtSqBxBVvbiQHyrY= +github.com/tikv/client-go/v2 v2.0.8-0.20231012084106-14934ce6283e/go.mod h1:tXip3uaG8miN+BWvD1os8aczFM++vGQx2DerDD4zrvQ= +github.com/tikv/pd/client v0.0.0-20230519121736-d15a686a670e h1:dO0YtekJ9IKiO9dXMZz0rNHPBiGCo+c37RUsnshoLwo= +github.com/tikv/pd/client v0.0.0-20230519121736-d15a686a670e/go.mod h1:5vgcvO020ZCdMZkTrRdS/wFZQUab82BSfKE38T61ro0= github.com/timakin/bodyclose v0.0.0-20221125081123-e39cf3fc478e h1:MV6KaVu/hzByHP0UvJ4HcMGE/8a6A4Rggc/0wx2AvJo= github.com/timakin/bodyclose v0.0.0-20221125081123-e39cf3fc478e/go.mod h1:27bSVNWSBOHm+qRp1T9qzaIpsWEP6TbUnei/43HK+PQ= github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs= diff --git a/session/session.go b/session/session.go index 86735af308896..5ccae09f21d35 100644 --- a/session/session.go +++ b/session/session.go @@ -4289,9 +4289,8 @@ func (s *session) setRequestSource(ctx context.Context, stmtLabel string, stmtNo if !s.isInternal() { if txn, _ := s.Txn(false); txn != nil && txn.Valid() { txn.SetOption(kv.RequestSourceType, stmtLabel) - } else { - s.sessionVars.RequestSourceType = stmtLabel } + s.sessionVars.RequestSourceType = stmtLabel return } if source := ctx.Value(kv.RequestSourceKey); source != nil { diff --git a/store/copr/coprocessor.go b/store/copr/coprocessor.go index f44ad273fd59e..f638ef8fcfbbb 100644 --- a/store/copr/coprocessor.go +++ b/store/copr/coprocessor.go @@ -266,6 +266,8 @@ type copTask struct { redirect2Replica *uint64 busyThreshold time.Duration meetLockFallback bool + // firstReadType is used to indicate the type of first read when retrying. + firstReadType string } type batchedCopTask struct { @@ -1156,12 +1158,16 @@ func (worker *copIteratorWorker) handleTaskOnce(bo *Backoffer, task *copTask, ch RecordTimeStat: true, RecordScanStat: true, TaskId: worker.req.TaskID, - RequestSource: task.requestSource.GetRequestSource(), ResourceControlContext: &kvrpcpb.ResourceControlContext{ ResourceGroupName: worker.req.ResourceGroupName, }, BusyThresholdMs: uint32(task.busyThreshold.Milliseconds()), }) + req.InputRequestSource = task.requestSource.GetRequestSource() + if task.firstReadType != "" { + req.ReadType = task.firstReadType + req.IsRetryRequest = true + } if worker.req.ResourceGroupTagger != nil { worker.req.ResourceGroupTagger(req) } @@ -1217,12 +1223,19 @@ func (worker *copIteratorWorker) handleTaskOnce(bo *Backoffer, task *copTask, ch tidbmetrics.DistSQLCoprRespBodySize.WithLabelValues(storeAddr).Observe(float64(len(copResp.Data))) } + var remains []*copTask if worker.req.Paging.Enable { - return worker.handleCopPagingResult(bo, rpcCtx, &copResponse{pbResp: copResp}, cacheKey, cacheValue, task, ch, costTime) + remains, err = worker.handleCopPagingResult(bo, rpcCtx, &copResponse{pbResp: copResp}, cacheKey, cacheValue, task, ch, costTime) + } else { + // Handles the response for non-paging copTask. + remains, err = worker.handleCopResponse(bo, rpcCtx, &copResponse{pbResp: copResp}, cacheKey, cacheValue, task, ch, nil, costTime) } - - // Handles the response for non-paging copTask. - return worker.handleCopResponse(bo, rpcCtx, &copResponse{pbResp: copResp}, cacheKey, cacheValue, task, ch, nil, costTime) + if req.ReadType != "" { + for _, remain := range remains { + remain.firstReadType = req.ReadType + } + } + return remains, err } const (