diff --git a/coderd/tailnet.go b/coderd/tailnet.go index e489f571a0094..d96059f8adbb4 100644 --- a/coderd/tailnet.go +++ b/coderd/tailnet.go @@ -91,13 +91,15 @@ func NewServerTailnet( }) } - derpMapUpdaterClosed := make(chan struct{}) + bgRoutines := &sync.WaitGroup{} originalDerpMap := derpMapFn() // it's important to set the DERPRegionDialer above _before_ we set the DERP map so that if // there is an embedded relay, we use the local in-memory dialer. conn.SetDERPMap(originalDerpMap) + bgRoutines.Add(1) go func() { - defer close(derpMapUpdaterClosed) + defer bgRoutines.Done() + defer logger.Debug(ctx, "polling DERPMap exited") ticker := time.NewTicker(5 * time.Second) defer ticker.Stop() @@ -120,7 +122,7 @@ func NewServerTailnet( tn := &ServerTailnet{ ctx: serverCtx, cancel: cancel, - derpMapUpdaterClosed: derpMapUpdaterClosed, + bgRoutines: bgRoutines, logger: logger, tracer: traceProvider.Tracer(tracing.TracerName), conn: conn, @@ -170,8 +172,15 @@ func NewServerTailnet( // registering the callback also triggers send of the initial node tn.coordinatee.SetNodeCallback(tn.nodeCallback) - go tn.watchAgentUpdates() - go tn.expireOldAgents() + tn.bgRoutines.Add(2) + go func() { + defer tn.bgRoutines.Done() + tn.watchAgentUpdates() + }() + go func() { + defer tn.bgRoutines.Done() + tn.expireOldAgents() + }() return tn, nil } @@ -204,6 +213,7 @@ func (s *ServerTailnet) Collect(metrics chan<- prometheus.Metric) { } func (s *ServerTailnet) expireOldAgents() { + defer s.logger.Debug(s.ctx, "stopped expiring old agents") const ( tick = 5 * time.Minute cutoff = 30 * time.Minute @@ -255,6 +265,7 @@ func (s *ServerTailnet) doExpireOldAgents(cutoff time.Duration) { } func (s *ServerTailnet) watchAgentUpdates() { + defer s.logger.Debug(s.ctx, "stopped watching agent updates") for { conn := s.getAgentConn() resp, ok := conn.NextUpdate(s.ctx) @@ -317,9 +328,9 @@ func (s *ServerTailnet) reinitCoordinator() { } type ServerTailnet struct { - ctx context.Context - cancel func() - derpMapUpdaterClosed chan struct{} + ctx context.Context + cancel func() + bgRoutines *sync.WaitGroup logger slog.Logger tracer trace.Tracer @@ -532,10 +543,12 @@ func (c *netConnCloser) Close() error { } func (s *ServerTailnet) Close() error { + s.logger.Info(s.ctx, "closing server tailnet") + defer s.logger.Debug(s.ctx, "server tailnet close complete") s.cancel() _ = s.conn.Close() s.transport.CloseIdleConnections() - <-s.derpMapUpdaterClosed + s.bgRoutines.Wait() return nil } diff --git a/enterprise/wsproxy/wsproxy.go b/enterprise/wsproxy/wsproxy.go index cb66c411d3c70..2a7e9e81e0cda 100644 --- a/enterprise/wsproxy/wsproxy.go +++ b/enterprise/wsproxy/wsproxy.go @@ -419,6 +419,8 @@ func (s *Server) RegisterNow() error { } func (s *Server) Close() error { + s.Logger.Info(s.ctx, "closing workspace proxy server") + defer s.Logger.Debug(s.ctx, "finished closing workspace proxy server") s.cancel() var err error pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy