From b4df73da4b48c4fbf982be33e0aad6b300c3fa75 Mon Sep 17 00:00:00 2001 From: Rob Ellison Date: Mon, 2 Dec 2024 21:54:27 +0000 Subject: [PATCH] Improvements to HTTP Connection Pooling --- pkg/target/http.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pkg/target/http.go b/pkg/target/http.go index 9bf4dab9..a8d4042a 100644 --- a/pkg/target/http.go +++ b/pkg/target/http.go @@ -397,9 +397,13 @@ func (ht *HTTPTarget) Write(messages []*models.Message) (*models.TargetWriteResu errResult = multierror.Append(errResult, errors.New("Error sending request: "+err.Error())) continue } - defer resp.Body.Close() + // Ensure response body is always closed if resp.StatusCode >= 200 && resp.StatusCode < 300 { + // Drain and close the body for successful responses + _, _ = io.Copy(io.Discard, resp.Body) + resp.Body.Close() + for _, msg := range goodMsgs { if msg.AckFunc != nil { // Ack successful messages msg.AckFunc() @@ -409,7 +413,10 @@ func (ht *HTTPTarget) Write(messages []*models.Message) (*models.TargetWriteResu continue } + // Process non-2xx responses responseBody, err := io.ReadAll(resp.Body) + _, _ = io.Copy(io.Discard, resp.Body) + resp.Body.Close() // Explicitly close the body after reading if err != nil { failed = append(failed, goodMsgs...)