Skip to content

Commit

Permalink
fix: implement signal handler for server commands
Browse files Browse the repository at this point in the history
Changelog: Title
Ticket: QA-782
Signed-off-by: Bahaa Aldeen Ghazal <bahaa.ghazal@northern.tech>
  • Loading branch information
bahaa-ghazal committed Jan 2, 2025
1 parent 3fa4a43 commit 6e17ada
Show file tree
Hide file tree
Showing 8 changed files with 133 additions and 8 deletions.
32 changes: 31 additions & 1 deletion backend/services/deployments/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,13 @@ import (
"encoding/base64"
"net/http"
"net/url"
"os"
"os/signal"
"strings"
"time"

"github.com/pkg/errors"
"golang.org/x/sys/unix"

"github.com/mendersoftware/mender-server/pkg/config"
"github.com/mendersoftware/mender-server/pkg/log"
Expand Down Expand Up @@ -165,6 +168,7 @@ func SetupObjectStorage(ctx context.Context) (objManager storage.ObjectStorage,

func RunServer(ctx context.Context) error {
c := config.Config
l := log.New(log.Ctx{})
dbClient, err := mstore.NewMongoClient(ctx, c)
if err != nil {
return err
Expand Down Expand Up @@ -221,5 +225,31 @@ func RunServer(ctx context.Context) error {
return http.ListenAndServeTLS(listen, cert, key, handler)
}

return http.ListenAndServe(listen, handler)
srv := &http.Server{
Addr: listen,
Handler: handler,
}

errChan := make(chan error, 1)
go func() {
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
errChan <- err
}
}()
quit := make(chan os.Signal, 1)
signal.Notify(quit, unix.SIGINT, unix.SIGTERM)
select {
case sig := <-quit:
l.Infof("received signal %s: terminating", sig)
case err = <-errChan:
l.Errorf("server terminated unexpectedly: %s", err.Error())
return err
}
l.Info("server shutdown")
ctxWithTimeout, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := srv.Shutdown(ctxWithTimeout); err != nil {
l.Error("error when shutting down the server ", err)
}
return nil
}
32 changes: 31 additions & 1 deletion backend/services/deviceauth/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,12 @@ package main
import (
"context"
"net/http"
"os"
"os/signal"
"time"

"github.com/pkg/errors"
"golang.org/x/sys/unix"

"github.com/mendersoftware/mender-server/pkg/config"
"github.com/mendersoftware/mender-server/pkg/log"
Expand Down Expand Up @@ -129,5 +132,32 @@ func RunServer(c config.Reader) error {
addr := c.GetString(dconfig.SettingListen)
l.Printf("listening on %s", addr)

return http.ListenAndServe(addr, apiHandler)
srv := &http.Server{
Addr: addr,
Handler: apiHandler,
}

errChan := make(chan error, 1)
go func() {
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
errChan <- err
}
}()
quit := make(chan os.Signal, 1)
signal.Notify(quit, unix.SIGINT, unix.SIGTERM)
select {
case sig := <-quit:
l.Infof("received signal %s: terminating", sig)
case err = <-errChan:
l.Errorf("server terminated unexpectedly: %s", err.Error())
return err
}

l.Info("server shutdown")
ctxWithTimeout, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := srv.Shutdown(ctxWithTimeout); err != nil {
l.Error("error when shutting down the server ", err)
}
return nil
}
3 changes: 2 additions & 1 deletion backend/services/deviceconfig/server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,8 @@ func InitAndRun(dataStore store.DataStore) error {
ctxWithTimeout, cancel := context.WithTimeout(ctx, 10*time.Second)
defer cancel()
if err := srv.Shutdown(ctxWithTimeout); err != nil {
l.Fatal("error when shutting down the server ", err)
l.Errorf("error when shutting down the server: %s", err.Error())
return err
}

l.Info("Server exited")
Expand Down
3 changes: 2 additions & 1 deletion backend/services/deviceconnect/server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,8 @@ func InitAndRun(conf config.Reader, dataStore store.DataStore) error {
ctxWithTimeout, cancel := context.WithTimeout(ctx, 5*time.Second)
defer cancel()
if err := srv.Shutdown(ctxWithTimeout); err != nil {
l.Fatal("error when shutting down the server ", err)
l.Errorf("error when shutting down the server: %s", err.Error())
return err
}
l.Info("server exited")

Expand Down
33 changes: 32 additions & 1 deletion backend/services/inventory/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,14 @@
package main

import (
"context"
"net/http"
"os"
"os/signal"
"time"

"github.com/pkg/errors"
"golang.org/x/sys/unix"

"github.com/mendersoftware/mender-server/pkg/log"

Expand Down Expand Up @@ -60,7 +65,33 @@ func RunServer(c config.Reader) error {
addr := c.GetString(SettingListen)
l.Printf("listening on %s", addr)

return http.ListenAndServe(addr, handler)
srv := &http.Server{
Addr: addr,
Handler: handler,
}

errChan := make(chan error, 1)
go func() {
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
errChan <- err
}
}()
quit := make(chan os.Signal, 1)
signal.Notify(quit, unix.SIGINT, unix.SIGTERM)
select {
case sig := <-quit:
l.Infof("received signal %s: terminating", sig)
case err := <-errChan:
l.Errorf("server terminated unexpectedly: %s", err.Error())
return err
}
l.Info("server shutdown")
ctxWithTimeout, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := srv.Shutdown(ctxWithTimeout); err != nil {
l.Error("error when shutting down the server ", err)
}
return nil
}

func maybeWithInventory(
Expand Down
3 changes: 2 additions & 1 deletion backend/services/iot-manager/server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,8 @@ func InitAndRun(conf config.Reader, dataStore store.DataStore) error {
ctxWithTimeout, cancel := context.WithTimeout(ctx, 5*time.Second)
defer cancel()
if err := srv.Shutdown(ctxWithTimeout); err != nil {
l.Fatal("error when shutting down the server ", err)
l.Errorf("error when shutting down the server: %s", err.Error())
return err
}

l.Info("server exiting")
Expand Down
3 changes: 2 additions & 1 deletion backend/services/reporting/app/server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,8 @@ func InitAndRun(conf config.Reader, store store.Store, ds store.DataStore) error
ctxWithTimeout, cancel := context.WithTimeout(ctx, 5*time.Second)
defer cancel()
if err := srv.Shutdown(ctxWithTimeout); err != nil {
l.Fatal("Server Shutdown: ", err)
l.Errorf("error when shutting down the server: %s", err.Error())
return err
}

return nil
Expand Down
32 changes: 31 additions & 1 deletion backend/services/useradm/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,17 @@
package main

import (
"context"
"net/http"
"os"
"os/signal"
"path"
"path/filepath"
"regexp"
"time"

"github.com/pkg/errors"
"golang.org/x/sys/unix"

"github.com/mendersoftware/mender-server/pkg/config"
"github.com/mendersoftware/mender-server/pkg/log"
Expand Down Expand Up @@ -157,7 +161,33 @@ func RunServer(c config.Reader) error {
addr := c.GetString(SettingListen)
l.Printf("listening on %s", addr)

return http.ListenAndServe(addr, handler)
srv := &http.Server{
Addr: addr,
Handler: handler,
}

errChan := make(chan error, 1)
go func() {
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
errChan <- err
}
}()
quit := make(chan os.Signal, 1)
signal.Notify(quit, unix.SIGINT, unix.SIGTERM)
select {
case sig := <-quit:
l.Infof("received signal %s: terminating", sig)
case err := <-errChan:
l.Errorf("server terminated unexpectedly: %s", err.Error())
return err
}
l.Info("server shutdown")
ctxWithTimeout, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := srv.Shutdown(ctxWithTimeout); err != nil {
l.Error("error when shutting down the server ", err)
}
return nil
}

func addPrivateKeys(
Expand Down

0 comments on commit 6e17ada

Please sign in to comment.