Skip to content

Commit

Permalink
fix: server shutdown logging and request context (#34)
Browse files Browse the repository at this point in the history
* fix: server shutdown logging and request context

* chore: changelog with release version

* chore: changelog 2
  • Loading branch information
Fazt01 committed Jul 15, 2024
1 parent 28d324b commit 5750247
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 12 deletions.
10 changes: 9 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,13 @@ How to release a new version:

## [Unreleased]

## [0.7.1] - 2024-07-11
### Changed
- Canceling `Server.Run()` context no longer cancels requests base context.

### Fixed
- No `Error` logging on successful graceful shut down.

## [0.7.0] - 2024-03-11
### Changed
- Logging interface changes to `log/slog`.
Expand Down Expand Up @@ -70,7 +77,8 @@ How to release a new version:
### Added
- Added Changelog.

[Unreleased]: https://github.com/strvcom/strv-backend-go-net/compare/v0.7.0...HEAD
[Unreleased]: https://github.com/strvcom/strv-backend-go-net/compare/v0.7.1...HEAD
[0.7.1]: https://github.com/strvcom/strv-backend-go-net/compare/v0.7.0...v0.7.1
[0.7.0]: https://github.com/strvcom/strv-backend-go-net/compare/v0.6.2...v0.7.0
[0.6.2]: https://github.com/strvcom/strv-backend-go-net/compare/v0.6.1...v0.6.2
[0.6.1]: https://github.com/strvcom/strv-backend-go-net/compare/v0.6.0...v0.6.1
Expand Down
18 changes: 7 additions & 11 deletions http/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"context"
"errors"
"log/slog"
"net"
"net/http"
"os"
"os/signal"
Expand Down Expand Up @@ -66,15 +65,8 @@ type Server struct {
}

// Run calls ListenAndServe but returns error only if err != http.ErrServerClosed.
// Passed context is used as base context of all http requests and to shutdown server gracefully.
// Server is shutdown when passed context is canceled, or when SIGTERM is received.
func (s *Server) Run(ctx context.Context) error {
cCtx, cancel := context.WithCancel(ctx)
defer cancel()

s.server.BaseContext = func(_ net.Listener) context.Context {
return cCtx
}

errCh := make(chan error, 1)
go func() {
errCh <- s.server.ListenAndServe()
Expand All @@ -91,11 +83,11 @@ func (s *Server) Run(ctx context.Context) error {
s.logger.Error("server stopped: error received", slog.Any("error", err))
}
case <-ctx.Done():
s.logger.Error("server stopped: context closed", slog.Any("error", ctx.Err()))
s.logger.Info("server stopped: context closed", slog.Any("error", ctx.Err()))
case sig := <-s.signalsListener:
s.logger.With(
slog.Any("signal", sig),
).Error("server stopped: signal received", slog.Any("error", neterrors.ErrServerInterrupted))
).Info("server stopped: signal received", slog.Any("error", neterrors.ErrServerInterrupted))
}

s.logger.With(
Expand Down Expand Up @@ -139,6 +131,10 @@ func (s *Server) beforeShutdown() {
}

type ServerHooks struct {
// Each ServerHookFunc will be run in parallel with the main http.Server.Shutdown(). Server.Run() will block
// until Shutdown() and all BeforeShutdown hooks completes (or ShutdownTimeout passes).
// Passed context is canceled after ShutdownTimeout passes, but at that point, completion of the hook
// is not waited for anymore (as Run returns after such timeout).
BeforeShutdown []ServerHookFunc
}

Expand Down

0 comments on commit 5750247

Please sign in to comment.