Skip to content

Track number of consumers explicitly

Mikhail Mazurskiy requested to merge ash2k/querier-sync-fix into master
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0xd63817]

goroutine 23919 [running]:
gitlab.com/gitlab-org/cluster-integration/gitlab-agent/v17/internal/module/agentk2kas_tunnel/router.(*AggregatingQuerier).unregisterConsumerLocked(0x1406c80?, 0xc000e3ed20)
	/tmp/build/internal/module/agentk2kas_tunnel/router/aggregating_querier.go:172 +0x97
gitlab.com/gitlab-org/cluster-integration/gitlab-agent/v17/internal/module/agentk2kas_tunnel/router.(*AggregatingQuerier).maybeStopPolling(0xc00023d320, 0xc004956e98?)
	/tmp/build/internal/module/agentk2kas_tunnel/router/aggregating_querier.go:161 +0xb2
gitlab.com/gitlab-org/cluster-integration/gitlab-agent/v17/internal/module/agentk2kas_tunnel/router.(*AggregatingQuerier).PollGatewayURLs(0xc00023d320, {0x189a6d0?, 0xc001dea5f0?}, 0x106b1a, 0xc002ca9b30)
	/tmp/build/internal/module/agentk2kas_tunnel/router/aggregating_querier.go:110 +0xd9
gitlab.com/gitlab-org/cluster-integration/gitlab-agent/v17/internal/tunnel/tunserver.(*gatewayFinder).Find.func1.1()
	/tmp/build/internal/tunnel/tunserver/gateway_finder.go:149 +0xb4
k8s.io/apimachinery/pkg/util/wait.(*Group).Start.func1()
	/root/go/pkg/mod/k8s.io/apimachinery@v0.28.9/pkg/util/wait/wait.go:72 +0x4f
created by k8s.io/apimachinery/pkg/util/wait.(*Group).Start in goroutine 23838
	/root/go/pkg/mod/k8s.io/apimachinery@v0.28.9/pkg/util/wait/wait.go:70 +0x73
  • Track number of consumers explicitly

This avoids race where multiple consumers unsubscribe concurrently and maybeStopPolling() sees 0 subscribers more than once.

  • Merge methods

  • Use a single mutex to simplify code

The bug was introduced in Subscriptions refactor (!1534 - merged).

Relates to gitlab-com/gl-infra/production#18087 (closed).

Merge request reports