diff --git a/pkg/services/grpcserver/service.go b/pkg/services/grpcserver/service.go index fe54b13f9b8..d3a6f2df5d8 100644 --- a/pkg/services/grpcserver/service.go +++ b/pkg/services/grpcserver/service.go @@ -168,8 +168,21 @@ func (s *gPRCServerService) Run(ctx context.Context) error { return err case <-ctx.Done(): } - s.logger.Warn("GRPC server: shutting down") - s.server.Stop() + + s.logger.Warn("GRPC server: initiating graceful shutdown") + gracefulStopDone := make(chan struct{}) + go func() { + s.server.GracefulStop() + close(gracefulStopDone) + }() + + select { + case <-gracefulStopDone: + s.logger.Info("GRPC server: graceful shutdown complete") + case <-time.After(30 * time.Second): + s.logger.Warn("GRPC server: graceful shutdown timed out, forcing stop") + s.server.Stop() + } return ctx.Err() }