mirror of https://github.com/status-im/consul.git
Merge pull request #13847 from hashicorp/gateway-goroutine-leak
Fix goroutine leaks in proxycfg when using ingress gateway
This commit is contained in:
commit
0786517b56
|
@ -0,0 +1,3 @@
|
||||||
|
```release-note:bug
|
||||||
|
connect: Fixed a goroutine/memory leak that would occur when using the ingress gateway.
|
||||||
|
```
|
|
@ -148,6 +148,16 @@ func (s *handlerIngressGateway) handleUpdate(ctx context.Context, u UpdateEvent,
|
||||||
|
|
||||||
for uid, cancelFn := range snap.IngressGateway.WatchedDiscoveryChains {
|
for uid, cancelFn := range snap.IngressGateway.WatchedDiscoveryChains {
|
||||||
if _, ok := watchedSvcs[uid]; !ok {
|
if _, ok := watchedSvcs[uid]; !ok {
|
||||||
|
for targetID, cancelUpstreamFn := range snap.IngressGateway.WatchedUpstreams[uid] {
|
||||||
|
s.logger.Debug("stopping watch of target",
|
||||||
|
"upstream", uid,
|
||||||
|
"target", targetID,
|
||||||
|
)
|
||||||
|
delete(snap.IngressGateway.WatchedUpstreams[uid], targetID)
|
||||||
|
delete(snap.IngressGateway.WatchedUpstreamEndpoints[uid], targetID)
|
||||||
|
cancelUpstreamFn()
|
||||||
|
}
|
||||||
|
|
||||||
cancelFn()
|
cancelFn()
|
||||||
delete(snap.IngressGateway.WatchedDiscoveryChains, uid)
|
delete(snap.IngressGateway.WatchedDiscoveryChains, uid)
|
||||||
}
|
}
|
||||||
|
|
|
@ -436,7 +436,17 @@ type discoveryChainWatchOpts struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *handlerUpstreams) watchDiscoveryChain(ctx context.Context, snap *ConfigSnapshot, opts discoveryChainWatchOpts) error {
|
func (s *handlerUpstreams) watchDiscoveryChain(ctx context.Context, snap *ConfigSnapshot, opts discoveryChainWatchOpts) error {
|
||||||
if _, ok := snap.ConnectProxy.WatchedDiscoveryChains[opts.id]; ok {
|
var watchedDiscoveryChains map[UpstreamID]context.CancelFunc
|
||||||
|
switch s.kind {
|
||||||
|
case structs.ServiceKindIngressGateway:
|
||||||
|
watchedDiscoveryChains = snap.IngressGateway.WatchedDiscoveryChains
|
||||||
|
case structs.ServiceKindConnectProxy:
|
||||||
|
watchedDiscoveryChains = snap.ConnectProxy.WatchedDiscoveryChains
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("unsupported kind %s", s.kind)
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, ok := watchedDiscoveryChains[opts.id]; ok {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -457,16 +467,7 @@ func (s *handlerUpstreams) watchDiscoveryChain(ctx context.Context, snap *Config
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
switch s.kind {
|
watchedDiscoveryChains[opts.id] = cancel
|
||||||
case structs.ServiceKindIngressGateway:
|
|
||||||
snap.IngressGateway.WatchedDiscoveryChains[opts.id] = cancel
|
|
||||||
case structs.ServiceKindConnectProxy:
|
|
||||||
snap.ConnectProxy.WatchedDiscoveryChains[opts.id] = cancel
|
|
||||||
default:
|
|
||||||
cancel()
|
|
||||||
return fmt.Errorf("unsupported kind %s", s.kind)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue