pushgateway/0001-Log-shutdown-gracefully-428.patch
chen-jan 219e6241ad Log shutdown gracefully
(cherry picked from commit da020715f9fad2e7100ab9cc51dd433e56c2f1c6)
2021-10-11 11:32:34 +08:00

86 lines
2.7 KiB
Diff

From 92c8d1e028bc6a102bb578e03ba19776bff379ed Mon Sep 17 00:00:00 2001
From: marie <marie.payne@hotmail.ca>
Date: Thu, 7 Oct 2021 06:10:11 -0400
Subject: [PATCH] Log shutdown gracefully (#428)
Log graceful shutdown at info level only
reference:
https://github.com/prometheus/pushgateway/commit/92c8d1e028bc6a102bb578e03ba19776bff379ed
Signed-off-by: mjip <marie.payne@hotmail.ca>
---
main.go | 29 ++++++++++++++++++-----------
1 file changed, 18 insertions(+), 11 deletions(-)
diff --git a/main.go b/main.go
index bdf61e8..2927d71 100644
--- a/main.go
+++ b/main.go
@@ -14,6 +14,7 @@
package main
import (
+ "context"
"fmt"
"net"
"net/http"
@@ -25,7 +26,6 @@ import (
"path/filepath"
"strings"
"syscall"
- "time"
"github.com/go-kit/kit/log"
"github.com/go-kit/kit/log/level"
@@ -191,13 +191,20 @@ func main() {
mux.Handle(apiPath+"/v1/", http.StripPrefix(apiPath+"/v1", av1))
- go closeListenerOnQuit(l, quitCh, logger)
- err = (&http.Server{Addr: *listenAddress, Handler: mux}).Serve(l)
- level.Error(logger).Log("msg", "HTTP server stopped", "err", err)
- // To give running connections a chance to submit their payload, we wait
- // for 1sec, but we don't want to wait long (e.g. until all connections
- // are done) to not delay the shutdown.
- time.Sleep(time.Second)
+ server := &http.Server{
+ Addr: *listenAddress,
+ Handler: mux,
+ }
+ go shutdownServerOnQuit(server, quitCh, logger)
+ err = (server).Serve(l)
+
+ // In the case of a graceful shutdown, do not log the error.
+ if err == http.ErrServerClosed {
+ level.Info(logger).Log("msg", "HTTP server stopped")
+ } else {
+ level.Error(logger).Log("msg", "HTTP server stopped", "err", err)
+ }
+
if err := ms.Shutdown(); err != nil {
level.Error(logger).Log("msg", "problem shutting down metric storage", "err", err)
}
@@ -237,9 +244,9 @@ func computeRoutePrefix(prefix string, externalURL *url.URL) string {
return prefix
}
-// closeListenerOnQuite closes the provided listener upon closing the provided
+// shutdownServerOnQuit shutdowns the provided server upon closing the provided
// quitCh or upon receiving a SIGINT or SIGTERM.
-func closeListenerOnQuit(l net.Listener, quitCh <-chan struct{}, logger log.Logger) {
+func shutdownServerOnQuit(server *http.Server, quitCh <-chan struct{}, logger log.Logger) error {
notifier := make(chan os.Signal, 1)
signal.Notify(notifier, os.Interrupt, syscall.SIGTERM)
@@ -251,5 +258,5 @@ func closeListenerOnQuit(l net.Listener, quitCh <-chan struct{}, logger log.Logg
level.Warn(logger).Log("msg", "received termination request via web service, exiting gracefully...")
break
}
- l.Close()
+ return server.Shutdown(context.Background())
}
--
2.30.0