milvus/internal/distributed/utils/util.go

33 lines
681 B
Go
Raw Normal View History

package utils
import (
"time"
"google.golang.org/grpc"
"github.com/milvus-io/milvus/pkg/log"
"github.com/milvus-io/milvus/pkg/util/paramtable"
)
func GracefulStopGRPCServer(s *grpc.Server) {
if s == nil {
return
}
ch := make(chan struct{})
go func() {
defer close(ch)
log.Debug("try to graceful stop grpc server...")
// will block until all rpc finished.
s.GracefulStop()
}()
select {
case <-ch:
case <-time.After(paramtable.Get().ProxyGrpcServerCfg.GracefulStopTimeout.GetAsDuration(time.Second)):
// took too long, manually close grpc server
log.Debug("stop grpc server...")
s.Stop()
// concurrent GracefulStop should be interrupted
<-ch
}
}