From 6405dc475466d9015ae683ceede6fca2ab8c744a Mon Sep 17 00:00:00 2001 From: Weizhen Wang Date: Wed, 25 Jan 2023 01:00:25 +0800 Subject: [PATCH 1/6] linter: find inappropriate key in call to context.WithValue Signed-off-by: Weizhen Wang --- build/BUILD.bazel | 1 + build/nogo_config.json | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/build/BUILD.bazel b/build/BUILD.bazel index 23cf263d525e3..3c2a569dd80d8 100644 --- a/build/BUILD.bazel +++ b/build/BUILD.bazel @@ -55,6 +55,7 @@ STATICHECK_ANALYZERS = [ "S1039", "S1040", "SA1019", + "SA1029", "SA2000", "SA2001", "SA2003", diff --git a/build/nogo_config.json b/build/nogo_config.json index 97a1a1feed50e..5882ef09312eb 100644 --- a/build/nogo_config.json +++ b/build/nogo_config.json @@ -772,6 +772,12 @@ "keyspace/": "keyspace code" } }, + "SA1029": { + "exclude_files": { + "/external/": "no need to vet third party code", + ".*_generated\\.go$": "ignore generated code" + } + }, "SA2000": { "exclude_files": { "/external/": "no need to vet third party code", From 91f9edffdee605418c75572bdbad05f3099546f4 Mon Sep 17 00:00:00 2001 From: Weizhen Wang Date: Wed, 25 Jan 2023 10:22:53 +0800 Subject: [PATCH 2/6] linter: find inappropriate key in call to context.WithValue Signed-off-by: Weizhen Wang --- ttl/metrics/metrics.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ttl/metrics/metrics.go b/ttl/metrics/metrics.go index 8768b0e267388..3c8ceee213a14 100644 --- a/ttl/metrics/metrics.go +++ b/ttl/metrics/metrics.go @@ -133,16 +133,16 @@ func (t *PhaseTracer) EndPhase() { t.EnterPhase("") } -const ttlPhaseTraceKey = "ttlPhaseTraceKey" +type ttlPhaseTraceKey struct{} // CtxWithPhaseTracer create a new context with tracer func CtxWithPhaseTracer(ctx context.Context, tracer *PhaseTracer) context.Context { - return context.WithValue(ctx, ttlPhaseTraceKey, tracer) + return context.WithValue(ctx, ttlPhaseTraceKey{}, tracer) } // PhaseTracerFromCtx returns a tracer from a given context func PhaseTracerFromCtx(ctx context.Context) *PhaseTracer { - if tracer, ok := ctx.Value(ttlPhaseTraceKey).(*PhaseTracer); ok { + if tracer, ok := ctx.Value(ttlPhaseTraceKey{}).(*PhaseTracer); ok { return tracer } return nil From 94a9f238f134f4b2bb3644fd91558b4cb88d3cfb Mon Sep 17 00:00:00 2001 From: Weizhen Wang Date: Wed, 25 Jan 2023 10:38:14 +0800 Subject: [PATCH 3/6] linter: find inappropriate key in call to context.WithValue Signed-off-by: Weizhen Wang --- executor/slow_query.go | 4 +++- executor/slow_query_test.go | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/executor/slow_query.go b/executor/slow_query.go index b83a480f85857..e8a2731a476e7 100644 --- a/executor/slow_query.go +++ b/executor/slow_query.go @@ -52,6 +52,8 @@ import ( "golang.org/x/exp/slices" ) +type signalsKey struct{} + // ParseSlowLogBatchSize is the batch size of slow-log lines for a worker to parse, exported for testing. var ParseSlowLogBatchSize = 64 @@ -474,7 +476,7 @@ func (e *slowQueryRetriever) parseSlowLog(ctx context.Context, sctx sessionctx.C } failpoint.Inject("mockReadSlowLogSlow", func(val failpoint.Value) { if val.(bool) { - signals := ctx.Value("signals").([]chan int) + signals := ctx.Value(signalsKey{}).([]chan int) signals[0] <- 1 <-signals[1] } diff --git a/executor/slow_query_test.go b/executor/slow_query_test.go index d696afa3c945d..fe2a5b68a329a 100644 --- a/executor/slow_query_test.go +++ b/executor/slow_query_test.go @@ -666,7 +666,7 @@ select * from t;` retriever, err := newSlowQueryRetriever() require.NoError(t, err) var signal1, signal2 = make(chan int, 1), make(chan int, 1) - ctx := context.WithValue(context.Background(), "signals", []chan int{signal1, signal2}) + ctx := context.WithValue(context.Background(), signalsKey{}, []chan int{signal1, signal2}) ctx, cancel := context.WithCancel(ctx) err = failpoint.Enable("github.com/pingcap/tidb/executor/mockReadSlowLogSlow", "return(true)") require.NoError(t, err) From 0192b75d6c893b0e3408f641f4c41d67c34ea721 Mon Sep 17 00:00:00 2001 From: Weizhen Wang Date: Wed, 25 Jan 2023 10:56:14 +0800 Subject: [PATCH 4/6] linter: find inappropriate key in call to context.WithValue Signed-off-by: Weizhen Wang --- store/gcworker/gc_worker.go | 1 + 1 file changed, 1 insertion(+) diff --git a/store/gcworker/gc_worker.go b/store/gcworker/gc_worker.go index a14780b878f19..f9b53e55988d4 100644 --- a/store/gcworker/gc_worker.go +++ b/store/gcworker/gc_worker.go @@ -1198,6 +1198,7 @@ func (w *GCWorker) resolveLocksForRange( failpoint.Inject("setGcResolveMaxBackoff", func(v failpoint.Value) { sleep := v.(int) // cooperate with github.com/tikv/client-go/v2/locate/invalidCacheAndRetry + //nolint: SA1029 ctx = context.WithValue(ctx, "injectedBackoff", struct{}{}) bo = tikv.NewBackofferWithVars(ctx, sleep, nil) }) From cf09b1e5ba900cecce0a295dec0644dd82403e14 Mon Sep 17 00:00:00 2001 From: Weizhen Wang Date: Wed, 25 Jan 2023 11:19:19 +0800 Subject: [PATCH 5/6] linter: find inappropriate key in call to context.WithValue Signed-off-by: Weizhen Wang --- build/nogo_config.json | 3 ++- executor/memtable_reader_test.go | 3 ++- executor/metrics_reader.go | 4 +++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/build/nogo_config.json b/build/nogo_config.json index 5882ef09312eb..94ce38d5eeae5 100644 --- a/build/nogo_config.json +++ b/build/nogo_config.json @@ -775,7 +775,8 @@ "SA1029": { "exclude_files": { "/external/": "no need to vet third party code", - ".*_generated\\.go$": "ignore generated code" + ".*_generated\\.go$": "ignore generated code", + ".*_test\\.go$": "ignore test code" } }, "SA2000": { diff --git a/executor/memtable_reader_test.go b/executor/memtable_reader_test.go index 870a4193fb3b2..f6d98d4ec24fc 100644 --- a/executor/memtable_reader_test.go +++ b/executor/memtable_reader_test.go @@ -29,6 +29,7 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/fn" "github.com/pingcap/sysutil" + "github.com/pingcap/tidb/executor" "github.com/pingcap/tidb/testkit" "github.com/pingcap/tidb/util/pdapi" pmodel "github.com/prometheus/common/model" @@ -56,7 +57,7 @@ func TestMetricTableData(t *testing.T) { } matrix = append(matrix, &pmodel.SampleStream{Metric: metric, Values: []pmodel.SamplePair{v1}}) - ctx := context.WithValue(context.Background(), "__mockMetricsPromData", matrix) + ctx := context.WithValue(context.Background(), executor.MockMetricsPromDataKey{}, matrix) ctx = failpoint.WithHook(ctx, func(ctx context.Context, fpname string) bool { return fpname == fpName }) diff --git a/executor/metrics_reader.go b/executor/metrics_reader.go index 314616785d60f..190d4cdd84adb 100644 --- a/executor/metrics_reader.go +++ b/executor/metrics_reader.go @@ -89,9 +89,11 @@ func (e *MetricRetriever) retrieve(ctx context.Context, sctx sessionctx.Context) return totalRows, nil } +type MockMetricsPromDataKey struct{} + func (e *MetricRetriever) queryMetric(ctx context.Context, sctx sessionctx.Context, queryRange promv1.Range, quantile float64) (result pmodel.Value, err error) { failpoint.InjectContext(ctx, "mockMetricsPromData", func() { - failpoint.Return(ctx.Value("__mockMetricsPromData").(pmodel.Matrix), nil) + failpoint.Return(ctx.Value(MockMetricsPromDataKey{}).(pmodel.Matrix), nil) }) // Add retry to avoid network error. From 49d62c986e6051731cbf1e6020d6ec0f24304081 Mon Sep 17 00:00:00 2001 From: Weizhen Wang Date: Wed, 25 Jan 2023 11:34:52 +0800 Subject: [PATCH 6/6] linter: find inappropriate key in call to context.WithValue Signed-off-by: Weizhen Wang --- executor/metrics_reader.go | 1 + 1 file changed, 1 insertion(+) diff --git a/executor/metrics_reader.go b/executor/metrics_reader.go index 190d4cdd84adb..d9e0bd39f1128 100644 --- a/executor/metrics_reader.go +++ b/executor/metrics_reader.go @@ -89,6 +89,7 @@ func (e *MetricRetriever) retrieve(ctx context.Context, sctx sessionctx.Context) return totalRows, nil } +// MockMetricsPromDataKey is for test type MockMetricsPromDataKey struct{} func (e *MetricRetriever) queryMetric(ctx context.Context, sctx sessionctx.Context, queryRange promv1.Range, quantile float64) (result pmodel.Value, err error) {