Force stop gRPC servers after a short timeout (#1463)

* Force stop gRPC servers after a short timeout.

* Use spawn instead of go.
This commit is contained in:
stasatdaglabs 2021-01-28 19:43:04 +02:00 committed by GitHub
parent 13ffa5093c
commit 7c1495ba65
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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
}