diff --git a/infrastructure/network/netadapter/server/grpcserver/grpc_server.go b/infrastructure/network/netadapter/server/grpcserver/grpc_server.go index 3a5dd8737..9a303fe24 100644 --- a/infrastructure/network/netadapter/server/grpcserver/grpc_server.go +++ b/infrastructure/network/netadapter/server/grpcserver/grpc_server.go @@ -9,6 +9,7 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/peer" "net" + "time" ) type gRPCServer struct { @@ -61,7 +62,20 @@ func (s *gRPCServer) listenOn(listenAddr string) error { } func (s *gRPCServer) Stop() error { - s.server.GracefulStop() + const stopTimeout = 2 * time.Second + + stopChan := make(chan interface{}) + spawn("gRPCServer.Stop", func() { + s.server.GracefulStop() + close(stopChan) + }) + + select { + case <-stopChan: + case <-time.After(stopTimeout): + log.Warnf("Could not gracefully stop %s: timed out after %s", s.name, stopTimeout) + s.server.Stop() + } return nil }