jaegertracing/jaeger · error
error shutting down cleaner server
Error message
error shutting down cleaner server: %w
What it means
During Shutdown the extension gracefully drains its internal HTTP server with c.server.Shutdown(ctx). If the server cannot stop within the context's deadline or returns another error, it is wrapped as 'error shutting down cleaner server' and propagated from Shutdown, failing the component shutdown.
Solutions
- Increase the component shutdown timeout so in-flight purge requests can complete
- Ensure clients stop issuing purge requests before shutting down the collector
- Retry shutdown with a fresh context; if persistent, investigate stuck connections with netstat/ss
Example fix
// before ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) // after ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
Defensive patterns
Strategy: try-catch
Validate before calling
// ensure no long-running purge requests before shutdown // optionally poll the /purge endpoint's readiness and let in-flight calls finish
Try / catch
if err := ext.Shutdown(ctx); err != nil {
if errors.Is(ctx.Err(), context.DeadlineExceeded) {
// retry with a longer deadline
ctx2, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
err = ext.Shutdown(ctx2)
}
} Prevention
- Give the collector a shutdown timeout longer than worst-case purge duration
- Avoid issuing purge requests during shutdown windows
- Monitor for stuck connections on the cleaner port
When it happens
Trigger: Shutdown() is called while the purge HTTP server still has active connections that do not finish before ctx is canceled, or the underlying listener returns an error during close.
Common situations: A purge request is in flight and the OTel shutdown timeout is shorter than the purge duration; using an already-canceled or very short shutdown context; stalled connections (keep-alive clients) keeping the drain alive.
Related errors
- cannot initialize admin server
- cannot start the admin server
- could not create jaeger-query
- error starting cleaner server
- failed to close HTTP server
AI-assisted analysis of jaegertracing/jaeger@806f444784 (2026-09-01).
Data as JSON: /api/errors/389fc1f984d13aca.
Report an issue: GitHub.
Appendix: source
Thrown at cmd/jaeger/internal/integration/storagecleaner/extension.go:81
Addr: ":" + c.config.Port,
Handler: mux,
ReadHeaderTimeout: 3 * time.Second,
}
c.telset.Logger.Info("Starting storage cleaner server", zap.String("addr", c.server.Addr))
go func() {
if err := c.server.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) {
err = fmt.Errorf("error starting cleaner server: %w", err)
componentstatus.ReportStatus(host, componentstatus.NewFatalErrorEvent(err))
}
}()
return nil
}
func (c *storageCleaner) Shutdown(ctx context.Context) error {
if c.server != nil {
if err := c.server.Shutdown(ctx); err != nil {
return fmt.Errorf("error shutting down cleaner server: %w", err)
}
}
return nil
}
func (*storageCleaner) Dependencies() []component.ID {
return []component.ID{jaegerstorage.ID}
}
View on GitHub (pinned to 806f444784)