From d18798ab7325ae4697cf9638ea4faf0d739e9ea8 Mon Sep 17 00:00:00 2001 From: Nicolas Chotard Date: Wed, 3 Apr 2024 15:40:24 +0200 Subject: [PATCH] runtime: Fix opentelemetry gracefull shutdown When running OPA with the distributed tracing option enabled, the OpenTelemetry trace exporter is not gracefully shut down when the server is stopped. This PR fixes that issues by moving the trace exporter shutdown in the gracefulShutdonw function. Fixes: #6651 Signed-off-by: Nicolas Chotard --- runtime/runtime.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/runtime/runtime.go b/runtime/runtime.go index 8dc95cafe9..0e89a39664 100644 --- a/runtime/runtime.go +++ b/runtime/runtime.go @@ -534,13 +534,6 @@ func (rt *Runtime) Serve(ctx context.Context) error { rt.logger.WithFields(map[string]interface{}{"err": err}).Error("Failed to start OpenTelemetry trace exporter.") return err } - - defer func() { - err := rt.traceExporter.Shutdown(ctx) - if err != nil { - rt.logger.WithFields(map[string]interface{}{"err": err}).Error("Failed to shutdown OpenTelemetry trace exporter gracefully.") - } - }() } rt.server = server.New(). @@ -857,6 +850,13 @@ func (rt *Runtime) gracefulServerShutdown(s *server.Server) error { return err } rt.logger.Info("Server shutdown.") + + if rt.traceExporter != nil { + err = rt.traceExporter.Shutdown(ctx) + if err != nil { + rt.logger.WithFields(map[string]interface{}{"err": err}).Error("Failed to shutdown OpenTelemetry trace exporter gracefully.") + } + } return nil }