From e1f48e2e7bdacae7ce70ab0015f1e09a726bc9fc Mon Sep 17 00:00:00 2001 From: Mostafa Moradian Date: Thu, 26 Dec 2024 13:56:28 +0100 Subject: [PATCH] Handle errors when stopping the listener for gRPC server Graceful shutdown of gRPC server --- api/grpc_server.go | 8 +++++--- api/grpc_server_test.go | 2 +- api/http_server_test.go | 2 +- cmd/gatewayd_app.go | 2 +- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/api/grpc_server.go b/api/grpc_server.go index 5bfd9d8b..9a2eb824 100644 --- a/api/grpc_server.go +++ b/api/grpc_server.go @@ -48,9 +48,11 @@ func (s *GRPCServer) Start() { } // Shutdown shuts down the gRPC server. -func (s *GRPCServer) Shutdown(_ context.Context) { - s.listener.Close() - s.grpcServer.Stop() +func (s *GRPCServer) Shutdown(context.Context) { + if err := s.listener.Close(); err != nil && !errors.Is(err, net.ErrClosed) { + s.API.Options.Logger.Err(err).Msg("failed to close listener") + } + s.grpcServer.GracefulStop() } // createGRPCAPI creates a new gRPC API server and listener. diff --git a/api/grpc_server_test.go b/api/grpc_server_test.go index 3ae73441..e043eed6 100644 --- a/api/grpc_server_test.go +++ b/api/grpc_server_test.go @@ -39,5 +39,5 @@ func Test_GRPC_Server(t *testing.T) { assert.Equal(t, config.Version, resp.GetVersion()) assert.Equal(t, config.VersionInfo(), resp.GetVersionInfo()) - grpcServer.Shutdown(context.Background()) + grpcServer.Shutdown(nil) } diff --git a/api/http_server_test.go b/api/http_server_test.go index a7670ea1..98693312 100644 --- a/api/http_server_test.go +++ b/api/http_server_test.go @@ -85,6 +85,6 @@ func Test_HTTP_Server(t *testing.T) { assert.Equal(t, len(config.Version), len(respBodyBytes)) assert.Equal(t, config.Version, string(respBodyBytes)) - grpcServer.Shutdown(context.Background()) + grpcServer.Shutdown(nil) httpServer.Shutdown(context.Background()) } diff --git a/cmd/gatewayd_app.go b/cmd/gatewayd_app.go index 912212c2..d8d33e15 100644 --- a/cmd/gatewayd_app.go +++ b/cmd/gatewayd_app.go @@ -1109,7 +1109,7 @@ func (app *GatewayDApp) stopGracefully(runCtx context.Context, sig os.Signal) { } if app.grpcServer != nil { - app.grpcServer.Shutdown(runCtx) + app.grpcServer.Shutdown(nil) logger.Info().Msg("Stopped gRPC Server") span.AddEvent("Stopped gRPC Server") }