Skip to content

Commit 8368312

Browse files
committed
lint: exclude problem files and apply nolint to minor cases in order
for linter to pass This commit adds a number of files to the nogo config for the linter to ignore. These files have manual unlocks that are catagorized as potentially problematic since there are unlocks >10 lines away from the lock. The commit also applies the nolint rule to any remaining manual unlock cases that are <=10 lines away from the lock. Release note: None
1 parent f8cf42e commit 8368312

File tree

281 files changed

+959
-7
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

281 files changed

+959
-7
lines changed

build/bazelutil/nogo_config.json

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,91 @@
2929
}
3030
},
3131
"deferunlockcheck": {
32+
"exclude_files": {
33+
"pkg/ccl/backupccl/restore_progress.go": "unlock >10 lines away from lock",
34+
"pkg/ccl/changefeedccl/cdctest/mock_webhook_sink.go": "unlock >10 lines away from lock",
35+
"pkg/ccl/changefeedccl/schemafeed/schema_feed.go": "unlock >10 lines away from lock",
36+
"pkg/ccl/changefeedccl/sink_kafka.go": "unlock >10 lines away from lock",
37+
"pkg/ccl/multitenantccl/tenantcostclient/tenant_side.go": "unlock >10 lines away from lock",
38+
"pkg/cmd/generate-spatial-ref-sys/main.go": "unlock >10 lines away from lock",
39+
"pkg/cmd/roachtest/cluster.go": "unlock >10 lines away from lock",
40+
"pkg/cmd/roachtest/test_runner.go": "unlock >10 lines away from lock",
41+
"pkg/cmd/smithtest/main.go": "unlock >10 lines away from lock",
42+
"pkg/gossip/client.go": "unlock >10 lines away from lock",
43+
"pkg/gossip/gossip.go": "unlock >10 lines away from lock",
44+
"pkg/gossip/server.go": "unlock >10 lines away from lock",
45+
"pkg/gossip/storage_test.go": "unlock >10 lines away from lock",
46+
"pkg/internal/sqlsmith/bulkio.go": "unlock >10 lines away from lock",
47+
"pkg/kv/kvclient/kvcoord/txn_coord_sender.go": "unlock >10 lines away from lock",
48+
"pkg/kv/kvclient/kvcoord/txn_interceptor_heartbeater_test.go": "unlock >10 lines away from lock",
49+
"pkg/kv/kvclient/kvcoord/dist_sender_ambiguous_test.go": "unlock >10 lines away from lock",
50+
"pkg/kv/kvclient/kvcoord/txn_interceptor_heartbeater.go": "unlock >10 lines away from lock",
51+
"pkg/kv/kvclient/kvcoord/txn_lock_gatekeeper.go": "unlock >10 lines away from lock",
52+
"pkg/kv/kvclient/kvstreamer/results_buffer_test.go": "unlock >10 lines away from lock",
53+
"pkg/kv/kvclient/kvstreamer/streamer.go": "unlock >10 lines away from lock",
54+
"pkg/kv/kvclient/rangecache/range_cache.go": "unlock >10 lines away from lock",
55+
"pkg/kv/kvserver/client_merge_test.go": "unlock >10 lines away from lock",
56+
"pkg/kv/kvserver/closedts/sidetransport/debug.go": "unlock >10 lines away from lock",
57+
"pkg/kv/kvserver/closedts/sidetransport/sender.go": "unlock >10 lines away from lock",
58+
"pkg/kv/kvserver/closedts/tracker/tracker_test.go": "unlock >10 lines away from lock",
59+
"pkg/kv/kvserver/concurrency/lock_table.go": "unlock >10 lines away from lock",
60+
"pkg/kv/kvserver/intentresolver/intent_resolver.go": "unlock >10 lines away from lock",
61+
"pkg/kv/kvserver/kvflowcontrol/kvflowhandle/kvflowhandle": "unlock >10 lines away from lock",
62+
"pkg/kv/kvserver/liveness/cache.go": "unlock >10 lines away from lock",
63+
"pkg/kv/kvserver/metrics.go": "unlock >10 lines away from lock",
64+
"pkg/kv/kvserver/queue.go": "unlock >10 lines away from lock",
65+
"pkg/kv/kvserver/raft_log_queue.go": "unlock >10 lines away from lock",
66+
"pkg/kv/kvserver/raft_log_truncator.go": "unlock >10 lines away from lock",
67+
"pkg/kv/kvserver/raftentry/cache.go": "unlock >10 lines away from lock",
68+
"pkg/kv/kvserver/rangefeed/registry.go": "unlock >10 lines away from lock",
69+
"pkg/kv/kvserver/replica.go": "unlock >10 lines away from lock",
70+
"pkg/kv/kvserver/replica_app_batch.go": "unlock >10 lines away from lock",
71+
"pkg/kv/kvserver/replica_metrics.go": "unlock >10 lines away from lock",
72+
"pkg/kv/kvserver/replica_proposal_buf.go": "unlock >10 lines away from lock",
73+
"pkg/kv/kvserver/replica_raft.go": "unlock >10 lines away from lock",
74+
"pkg/kv/kvserver/replica_raftstorage.go": "unlock >10 lines away from lock",
75+
"pkg/kv/kvserver/replica_rangefeed.go": "unlock >10 lines away from lock",
76+
"pkg/kv/kvserver/replica_test.go": "unlock >10 lines away from lock",
77+
"pkg/kv/kvserver/replica_write.go": "unlock >10 lines away from lock",
78+
"pkg/kv/kvserver/scheduler.go": "unlock >10 lines away from lock",
79+
"pkg/kv/kvserver/store.go": "unlock >10 lines away from lock",
80+
"pkg/kv/kvserver/store_test.go": "unlock >10 lines away from lock",
81+
"pkg/kv/kvserver/store_create_replica.go": "unlock >10 lines away from lock",
82+
"pkg/kv/kvserver/store_gossip.go": "unlock >10 lines away from lock",
83+
"pkg/kv/kvserver/store_raft.go": "unlock >10 lines away from lock",
84+
"pkg/kv/kvserver/store_remove_replica.go": "unlock >10 lines away from lock",
85+
"pkg/kv/kvserver/txnwait/queue.go": "unlock >10 lines away from lock",
86+
"pkg/obs/event_exporter.go": "unlock >10 lines away from lock",
87+
"pkg/rpc/clock_offset.go": "unlock >10 lines away from lock",
88+
"pkg/server/status/recorder_test.go": "unlock >10 lines away from lock",
89+
"pkg/server/telemetry/features.go": "unlock >10 lines away from lock",
90+
"pkg/sql/catalog/lease/lease_test.go": "unlock >10 lines away from lock",
91+
"pkg/sql/colflow/routers.go": "unlock >10 lines away from lock",
92+
"pkg/sql/contention/contentionutils/concurrent_buffer_guard.go": "unlock >10 lines away from lock",
93+
"pkg/sql/distsql_running.go": "unlock >10 lines away from lock",
94+
"pkg/sql/distsql_running_test.go": "unlock >10 lines away from lock",
95+
"pkg/sql/flowinfra/flow_registry.go": "unlock >10 lines away from lock",
96+
"pkg/sql/idxusage/local_idx_usage_stats.go": "unlock >10 lines away from lock",
97+
"pkg/sql/pgwire/server.go": "unlock >10 lines away from lock",
98+
"pkg/sql/rowflow/routers.go": "unlock >10 lines away from lock",
99+
"pkg/sql/schema_changer_test.go": "unlock >10 lines away from lock",
100+
"pkg/sql/stats/stats_cache.go": "unlock >10 lines away from lock",
101+
"pkg/sql/tests/rsg_test.go": "unlock >10 lines away from lock",
102+
"pkg/sql/txn_restart_test.go": "unlock >10 lines away from lock",
103+
"pkg/testutils/lint/passes/deferunlockcheck/testdata/src/a/a.go": "test file for the linter",
104+
"pkg/testutils/storageutils/mocking.go": "unlock >10 lines away from lock",
105+
"pkg/util/admission/work_queue.go": "unlock >10 lines away from lock",
106+
"pkg/util/circuit/circuitbreaker.go": "unlock >10 lines away from lock",
107+
"pkg/util/metric/hdrhistogram.go": "unlock >10 lines away from lock",
108+
"pkg/util/mon/bytes_usage.go": "unlock >10 lines away from lock",
109+
"pkg/util/syncutil/int_map.go": "unlock >10 lines away from lock",
110+
"pkg/util/syncutil/singleflight/singleflight": "unlock >10 lines away from lock",
111+
"pkg/util/tracing/crdbspan.go": "unlock >10 lines away from lock",
112+
"pkg/util/tracing/span.go": "unlock >10 lines away from lock",
113+
"pkg/workload/histogram/histogram.go": "unlock >10 lines away from lock",
114+
"pkg/workload/schemachange/schemachange.go": "unlock >10 lines away from lock",
115+
"pkg/workload/tpcc/generate.go": "unlock >10 lines away from lock"
116+
},
32117
"only_files": {
33118
"cockroach/pkg/.*$": "first-party code",
34119
"cockroach/bazel-out/.*/bin/pkg/.*$": "first-party code"

pkg/acceptance/localcluster/cluster.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -475,6 +475,7 @@ func (n *Node) Alive() bool {
475475
func (n *Node) StatusClient(ctx context.Context) serverpb.StatusClient {
476476
n.Lock()
477477
existingClient := n.statusClient
478+
// nolint:deferunlock
478479
n.Unlock()
479480

480481
if existingClient != nil {
@@ -588,6 +589,7 @@ func (n *Node) startAsyncInnerLocked(ctx context.Context, joins ...string) error
588589
_ = errors.As(waitErr, &execErr)
589590
n.Lock()
590591
n.setNotRunningLocked(execErr)
592+
// nolint:deferunlock
591593
n.Unlock()
592594
}(n.cmd)
593595

@@ -695,6 +697,7 @@ func (n *Node) waitUntilLive(dur time.Duration) error {
695697
if n.cmd != nil {
696698
pid = n.cmd.Process.Pid
697699
}
700+
// nolint:deferunlock
698701
n.Unlock()
699702
if pid == 0 {
700703
log.Info(ctx, "process already quit")
@@ -717,12 +720,14 @@ func (n *Node) waitUntilLive(dur time.Duration) error {
717720
if n.Cfg.RPCPort == 0 {
718721
n.Lock()
719722
n.rpcPort = pgURL.Port()
723+
// nolint:deferunlock
720724
n.Unlock()
721725
}
722726

723727
pgURL.Path = n.Cfg.DB
724728
n.Lock()
725729
n.pgURL = pgURL.String()
730+
// nolint:deferunlock
726731
n.Unlock()
727732

728733
var uiURL *url.URL
@@ -739,6 +744,7 @@ func (n *Node) waitUntilLive(dur time.Duration) error {
739744
// http port is required but isn't initialized yet.
740745
n.Lock()
741746
n.db = makeDB(n.pgURL, n.Cfg.NumWorkers, n.Cfg.DB)
747+
// nolint:deferunlock
742748
n.Unlock()
743749

744750
{
@@ -769,6 +775,7 @@ func (n *Node) Kill() {
769775
for ok := false; !ok; {
770776
n.Lock()
771777
ok = n.cmd == nil
778+
// nolint:deferunlock
772779
n.Unlock()
773780
}
774781
}
@@ -804,6 +811,7 @@ func (n *Node) Signal(s os.Signal) {
804811
func (n *Node) Wait() *exec.ExitError {
805812
n.Lock()
806813
ch := n.notRunning
814+
// nolint:deferunlock
807815
n.Unlock()
808816
if ch == nil {
809817
log.Warning(context.Background(), "(*Node).Wait called when node was not running")

pkg/ccl/auditloggingccl/audit_log_config.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ func UpdateAuditConfigOnChange(
8585
}
8686
acl.Lock()
8787
acl.Config = config
88+
// nolint:deferunlock
8889
acl.Unlock()
8990
}
9091

pkg/ccl/backupccl/backup_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2593,9 +2593,11 @@ func TestBackupRestoreDuringUserDefinedTypeChange(t *testing.T) {
25932593
if numTypeChangesStarted == len(tc.queries) {
25942594
close(typeChangesStarted)
25952595
}
2596+
// nolint:deferunlock
25962597
mu.Unlock()
25972598
<-waitForBackup
25982599
} else {
2600+
// nolint:deferunlock
25992601
mu.Unlock()
26002602
}
26012603
return nil
@@ -2624,6 +2626,7 @@ CREATE TYPE d.greeting AS ENUM ('hello', 'howdy', 'hi');
26242626
if numTypeChangesFinished == totalQueries {
26252627
close(typeChangesFinished)
26262628
}
2629+
// nolint:deferunlock
26272630
mu.Unlock()
26282631
}(query, len(tc.queries))
26292632
}
@@ -6205,6 +6208,7 @@ func TestRestoreErrorPropagates(t *testing.T) {
62056208

62066209
jobsTableKey.Lock()
62076210
jobsTableKey.key = tc.ApplicationLayer(0).Codec().TablePrefix(uint32(systemschema.JobsTable.GetID()))
6211+
// nolint:deferunlock
62086212
jobsTableKey.Unlock()
62096213

62106214
runner.Exec(t, `SET CLUSTER SETTING jobs.metrics.interval.poll = '30s'`)
@@ -6387,6 +6391,7 @@ INSERT INTO foo.bar VALUES (110), (210), (310), (410), (510)`)
63876391
startingSpan := mkSpan(id1, "/Tenant/10/Table/:id/1", "/Tenant/10/Table/:id/2")
63886392
mu.Lock()
63896393
require.Equal(t, []string{startingSpan.String()}, mu.exportRequestSpans)
6394+
// nolint:deferunlock
63906395
mu.Unlock()
63916396
resetStateVars()
63926397

@@ -6397,6 +6402,7 @@ INSERT INTO foo.bar VALUES (110), (210), (310), (410), (510)`)
63976402
resumeSpan := mkSpan(id1, "/Tenant/10/Table/:id/1/510/0", "/Tenant/10/Table/:id/2")
63986403
mu.Lock()
63996404
require.Equal(t, []string{startingSpan.String(), resumeSpan.String()}, mu.exportRequestSpans)
6405+
// nolint:deferunlock
64006406
mu.Unlock()
64016407
resetStateVars()
64026408

@@ -6415,6 +6421,7 @@ INSERT INTO foo.bar VALUES (110), (210), (310), (410), (510)`)
64156421
}
64166422
mu.Lock()
64176423
require.Equal(t, expected, mu.exportRequestSpans)
6424+
// nolint:deferunlock
64186425
mu.Unlock()
64196426
resetStateVars()
64206427

@@ -6448,6 +6455,7 @@ INSERT INTO baz.bar VALUES (110, 'a'), (210, 'b'), (310, 'c'), (410, 'd'), (510,
64486455
}
64496456
mu.Lock()
64506457
require.Equal(t, expected, mu.exportRequestSpans)
6458+
// nolint:deferunlock
64516459
mu.Unlock()
64526460
resetStateVars()
64536461

pkg/ccl/backupccl/backupinfo/manifest_handling.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1541,6 +1541,7 @@ func GetBackupManifests(
15411541
manifests[i] = desc
15421542
}
15431543
subMem.Shrink(ctx, size)
1544+
// nolint:deferunlock
15441545
memMu.Unlock()
15451546

15461547
return err

pkg/ccl/backupccl/restore_job.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,7 @@ func restore(
318318
introducedSpanFrontier,
319319
targetRestoreSpanSize.Get(&execCtx.ExecCfg().Settings.SV),
320320
progressTracker.useFrontier)
321+
// nolint:deferunlock
321322
progressTracker.mu.Unlock()
322323
if err != nil {
323324
return roachpb.RowCount{}, err
@@ -2153,6 +2154,7 @@ func insertStats(
21532154
mu.completedBatches++
21542155
remainingBatches := totalNumBatches - mu.completedBatches
21552156
completedBatches := mu.completedBatches
2157+
// nolint:deferunlock
21562158
mu.Unlock()
21572159
if insertStatsProgress.ShouldLog() {
21582160
logStatsProgress(remainingBatches, completedBatches)

pkg/ccl/backupccl/tenant_backup_nemesis_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -428,13 +428,15 @@ func (r *randomBackupNemesis) Stop() {
428428
func (r *randomBackupNemesis) TablesToCheck() []string {
429429
r.mu.Lock()
430430
ret := append([]string(nil), r.mu.tablesToCheck...)
431+
// nolint:deferunlock
431432
r.mu.Unlock()
432433
return ret
433434
}
434435

435436
func (r *randomBackupNemesis) addTable(name string) {
436437
r.mu.Lock()
437438
r.mu.tablesToCheck = append(r.mu.tablesToCheck, name)
439+
// nolint:deferunlock
438440
r.mu.Unlock()
439441
}
440442

pkg/ccl/changefeedccl/cdctest/schema_registry.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ func (r *SchemaRegistry) EncodedAvroToNative(b []byte) (interface{}, error) {
207207

208208
r.mu.Lock()
209209
jsonSchema := r.mu.schemas[id]
210+
// nolint:deferunlock
210211
r.mu.Unlock()
211212
codec, err := goavro.NewCodec(jsonSchema)
212213
if err != nil {

pkg/ccl/changefeedccl/changefeed_processors.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1187,6 +1187,7 @@ func (cf *changeFrontier) Start(ctx context.Context) {
11871187
cf.metricsID = cf.metrics.mu.id
11881188
cf.metrics.mu.id++
11891189
sli.RunningCount.Inc(1)
1190+
// nolint:deferunlock
11901191
cf.metrics.mu.Unlock()
11911192

11921193
cf.sliMetricsID = cf.sliMetrics.claimId()
@@ -1229,6 +1230,7 @@ func (cf *changeFrontier) closeMetrics() {
12291230
}
12301231
delete(cf.metrics.mu.resolved, cf.metricsID)
12311232
cf.metricsID = -1
1233+
// nolint:deferunlock
12321234
cf.metrics.mu.Unlock()
12331235

12341236
cf.sliMetrics.closeId(cf.sliMetricsID)
@@ -1381,6 +1383,7 @@ func (cf *changeFrontier) forwardFrontier(resolved jobspb.ResolvedSpan) error {
13811383
if cf.metricsID != -1 {
13821384
cf.metrics.mu.resolved[cf.metricsID] = newResolved
13831385
}
1386+
// nolint:deferunlock
13841387
cf.metrics.mu.Unlock()
13851388

13861389
return cf.maybeEmitResolved(newResolved)

pkg/ccl/changefeedccl/event_processing.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -646,13 +646,15 @@ func (c *parallelEventConsumer) incInFlight() {
646646
c.mu.Lock()
647647
c.mu.inFlight++
648648
c.metrics.ParallelConsumerInFlightEvents.Update(int64(c.mu.inFlight))
649+
// nolint:deferunlock
649650
c.mu.Unlock()
650651
}
651652

652653
func (c *parallelEventConsumer) decInFlight() {
653654
c.mu.Lock()
654655
c.mu.inFlight--
655656
notifyFlush := c.mu.waiting && c.mu.inFlight == 0
657+
// nolint:deferunlock
656658
c.mu.Unlock()
657659

658660
// If someone is waiting on a flush, signal to them
@@ -706,6 +708,7 @@ func (c *parallelEventConsumer) Flush(ctx context.Context) error {
706708
c.mu.Lock()
707709
c.mu.waiting = false
708710
c.mu.flushFrontier = c.spanFrontier.Frontier()
711+
// nolint:deferunlock
709712
c.mu.Unlock()
710713
return nil
711714
}

pkg/ccl/changefeedccl/kvevent/blocking_buffer.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ func (b *blockingBuffer) pop() (e Event, ok bool, err error) {
150150
func (b *blockingBuffer) notifyOutOfQuota(canFlush bool) {
151151
b.mu.Lock()
152152
b.mu.canFlush = canFlush
153+
// nolint:deferunlock
153154
b.mu.Unlock()
154155

155156
if canFlush {
@@ -165,6 +166,7 @@ func (b *blockingBuffer) notifyOutOfQuota(canFlush bool) {
165166
func (b *blockingBuffer) producerBlocked() {
166167
b.mu.Lock()
167168
b.mu.numBlocked++
169+
// nolint:deferunlock
168170
b.mu.Unlock()
169171
}
170172

@@ -183,6 +185,7 @@ func (b *blockingBuffer) quotaAcquiredAfterWait() {
183185
// Clear out canFlush since we know that producers no longer blocked.
184186
b.mu.canFlush = false
185187
}
188+
// nolint:deferunlock
186189
b.mu.Unlock()
187190
}
188191

pkg/ccl/changefeedccl/metrics.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -848,6 +848,7 @@ func MakeMetrics(histogramWindow time.Duration) metric.Struct {
848848
maxBehind = behind
849849
}
850850
}
851+
// nolint:deferunlock
851852
m.mu.Unlock()
852853
return maxBehind.Nanoseconds()
853854
})

pkg/ccl/changefeedccl/schema_registry.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ func newConfluentSchemaRegistry(
148148
}
149149
schemaRegistrySingletons.cachePerEndpoint[baseURL] = src
150150
}
151+
// nolint:deferunlock
151152
schemaRegistrySingletons.mu.Unlock()
152153

153154
s, err := getAndDeleteParams(u)

pkg/ccl/changefeedccl/schemafeed/schema_feed.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,7 @@ func (tf *schemaFeed) Run(ctx context.Context) error {
280280
func (tf *schemaFeed) primeInitialTableDescs(ctx context.Context) error {
281281
tf.mu.Lock()
282282
initialTableDescTs := tf.mu.highWater
283+
// nolint:deferunlock
283284
tf.mu.Unlock()
284285
var initialDescs []catalog.Descriptor
285286

@@ -312,6 +313,7 @@ func (tf *schemaFeed) primeInitialTableDescs(ctx context.Context) error {
312313
tbl := desc.(catalog.TableDescriptor)
313314
tf.mu.typeDeps.ingestTable(tbl)
314315
}
316+
// nolint:deferunlock
315317
tf.mu.Unlock()
316318

317319
return tf.ingestDescriptors(ctx, hlc.Timestamp{}, initialTableDescTs, initialDescs, tf.validateDescriptor)
@@ -510,6 +512,7 @@ func (tf *schemaFeed) pauseOrResumePolling(
510512
func (tf *schemaFeed) highWater() hlc.Timestamp {
511513
tf.mu.Lock()
512514
highWater := tf.mu.highWater
515+
// nolint:deferunlock
513516
tf.mu.Unlock()
514517
return highWater
515518
}

0 commit comments

Comments
 (0)