Track number of consumers explicitly
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).