From 7638c560ab64177d2c59fb5303ca4a1efa88d743 Mon Sep 17 00:00:00 2001 From: Paulo Janotti Date: Wed, 5 Feb 2025 17:48:39 -0800 Subject: [PATCH] [extension/httpforwarder] Shutdown should wait server exit --- extension/httpforwarderextension/extension.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/extension/httpforwarderextension/extension.go b/extension/httpforwarderextension/extension.go index daa0e99ae1a72..bf9c79cc03121 100644 --- a/extension/httpforwarderextension/extension.go +++ b/extension/httpforwarderextension/extension.go @@ -10,6 +10,7 @@ import ( "io" "net/http" "net/url" + "sync" "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/component/componentstatus" @@ -23,6 +24,7 @@ type httpForwarder struct { server *http.Server settings component.TelemetrySettings config *Config + shutdownWG sync.WaitGroup } var _ extension.Extension = (*httpForwarder)(nil) @@ -47,7 +49,9 @@ func (h *httpForwarder) Start(ctx context.Context, host component.Host) error { return fmt.Errorf("failed to create HTTP Client: %w", err) } + h.shutdownWG.Add(1) go func() { + defer h.shutdownWG.Done() if errHTTP := h.server.Serve(listener); !errors.Is(errHTTP, http.ErrServerClosed) && errHTTP != nil { componentstatus.ReportStatus(host, componentstatus.NewFatalErrorEvent(errHTTP)) } @@ -60,7 +64,9 @@ func (h *httpForwarder) Shutdown(_ context.Context) error { if h.server == nil { return nil } - return h.server.Close() + err := h.server.Close() + h.shutdownWG.Wait() + return err } func (h *httpForwarder) forwardRequest(writer http.ResponseWriter, request *http.Request) {