From 735440d1a34ff9b3de679df4bc085133c684c9ef Mon Sep 17 00:00:00 2001 From: Anton Schubert Date: Fri, 17 Jun 2022 10:58:22 +0200 Subject: [PATCH 1/4] add timeout for http shutdown, add db disconnect --- app.go | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/app.go b/app.go index 917d32b8..78c1ad6b 100644 --- a/app.go +++ b/app.go @@ -54,12 +54,13 @@ const ( ) const ( - AuthPrefix = "Bearer " - Postgres = "postgres" - Sqlite = "sqlite3" - updateInterval = 5000 - HTTPReadTimeout = 30 * time.Second - privateKeyFileMode = 0o600 + AuthPrefix = "Bearer " + Postgres = "postgres" + Sqlite = "sqlite3" + updateInterval = 5000 + HTTPReadTimeout = 30 * time.Second + HTTPShutdownTimeout = 3 * time.Second + privateKeyFileMode = 0o600 registerCacheExpiration = time.Minute * 15 registerCacheCleanup = time.Minute * 20 @@ -668,8 +669,13 @@ func (h *Headscale) Serve() error { Msg("Received signal to stop, shutting down gracefully") // Gracefully shut down servers - promHTTPServer.Shutdown(ctx) - httpServer.Shutdown(ctx) + ctx, cancel := context.WithTimeout(context.Background(), HTTPShutdownTimeout) + if err := promHTTPServer.Shutdown(ctx); err != nil { + log.Error().Err(err).Msg("Failed to shutdown prometheus http") + } + if err := httpServer.Shutdown(ctx); err != nil { + log.Error().Err(err).Msg("Failed to shutdown http") + } grpcSocket.GracefulStop() // Close network listeners @@ -680,7 +686,21 @@ func (h *Headscale) Serve() error { // Stop listening (and unlink the socket if unix type): socketListener.Close() + // Close db connections + db, err := h.db.DB() + if err != nil { + log.Error().Err(err).Msg("Failed to get db handle") + } + err = db.Close() + if err != nil { + log.Error().Err(err).Msg("Failed to close db") + } + + log.Info(). + Msg("Headscale stopped") + // And we're done: + cancel() os.Exit(0) } } From 8111b0aa834afc32d7852e7c1663b70b2d939e18 Mon Sep 17 00:00:00 2001 From: Anton Schubert Date: Fri, 17 Jun 2022 11:07:35 +0200 Subject: [PATCH 2/4] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ccd4f715..8a14abf5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,7 @@ - Add configuration option to allow Tailscale clients to use a random WireGuard port. [kb/1181/firewalls](https://tailscale.com/kb/1181/firewalls) [#624](https://github.com/juanfont/headscale/pull/624) - Improve obtuse UX regarding missing configuration (`ephemeral_node_inactivity_timeout` not set) [#639](https://github.com/juanfont/headscale/pull/639) - Fix nodes being shown as 'offline' in `tailscale status` [648](https://github.com/juanfont/headscale/pull/648) +- Improve shutdown behaviour [651](https://github.com/juanfont/headscale/pull/651) ## 0.15.0 (2022-03-20) From 0fa943e4b74c394f73eef06df9c3402810b90f6c Mon Sep 17 00:00:00 2001 From: Kristoffer Dalby Date: Sun, 26 Jun 2022 09:29:33 +0200 Subject: [PATCH 3/4] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8a14abf5..7b70c324 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,7 +31,7 @@ - Add configuration option to allow Tailscale clients to use a random WireGuard port. [kb/1181/firewalls](https://tailscale.com/kb/1181/firewalls) [#624](https://github.com/juanfont/headscale/pull/624) - Improve obtuse UX regarding missing configuration (`ephemeral_node_inactivity_timeout` not set) [#639](https://github.com/juanfont/headscale/pull/639) - Fix nodes being shown as 'offline' in `tailscale status` [648](https://github.com/juanfont/headscale/pull/648) -- Improve shutdown behaviour [651](https://github.com/juanfont/headscale/pull/651) +- Improve shutdown behaviour [#651](https://github.com/juanfont/headscale/pull/651) ## 0.15.0 (2022-03-20) From 4637400d2916be712f22e0ed48c2f03769687b85 Mon Sep 17 00:00:00 2001 From: Kristoffer Dalby Date: Sun, 26 Jun 2022 09:30:16 +0200 Subject: [PATCH 4/4] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b70c324..ad3bbfbf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,7 +30,7 @@ - Add -c option to specify config file from command line [#285](https://github.com/juanfont/headscale/issues/285) [#612](https://github.com/juanfont/headscale/pull/601) - Add configuration option to allow Tailscale clients to use a random WireGuard port. [kb/1181/firewalls](https://tailscale.com/kb/1181/firewalls) [#624](https://github.com/juanfont/headscale/pull/624) - Improve obtuse UX regarding missing configuration (`ephemeral_node_inactivity_timeout` not set) [#639](https://github.com/juanfont/headscale/pull/639) -- Fix nodes being shown as 'offline' in `tailscale status` [648](https://github.com/juanfont/headscale/pull/648) +- Fix nodes being shown as 'offline' in `tailscale status` [#648](https://github.com/juanfont/headscale/pull/648) - Improve shutdown behaviour [#651](https://github.com/juanfont/headscale/pull/651) ## 0.15.0 (2022-03-20)