Merge pull request #1501 from crosbymichael/trap-err

Trap close error on shutdown
This commit is contained in:
Kenfe-Mickaël Laventure 2017-09-13 14:04:32 -07:00 committed by GitHub
commit 0f6d1d21b2

View File

@ -8,6 +8,7 @@ import (
"net/http/pprof" "net/http/pprof"
"os" "os"
"path/filepath" "path/filepath"
"strings"
"github.com/boltdb/bolt" "github.com/boltdb/bolt"
containers "github.com/containerd/containerd/api/services/containers/v1" containers "github.com/containerd/containerd/api/services/containers/v1"
@ -129,14 +130,14 @@ func (s *Server) ServeGRPC(l net.Listener) error {
// handler. This needs to be the last service registered so that it can collect // handler. This needs to be the last service registered so that it can collect
// metrics for every other service // metrics for every other service
grpc_prometheus.Register(s.rpc) grpc_prometheus.Register(s.rpc)
return s.rpc.Serve(l) return trapClosedConnErr(s.rpc.Serve(l))
} }
// ServeMetrics provides a prometheus endpoint for exposing metrics // ServeMetrics provides a prometheus endpoint for exposing metrics
func (s *Server) ServeMetrics(l net.Listener) error { func (s *Server) ServeMetrics(l net.Listener) error {
m := http.NewServeMux() m := http.NewServeMux()
m.Handle("/metrics", metrics.Handler()) m.Handle("/metrics", metrics.Handler())
return http.Serve(l, m) return trapClosedConnErr(http.Serve(l, m))
} }
// ServeDebug provides a debug endpoint // ServeDebug provides a debug endpoint
@ -150,12 +151,12 @@ func (s *Server) ServeDebug(l net.Listener) error {
m.Handle("/debug/pprof/profile", http.HandlerFunc(pprof.Profile)) m.Handle("/debug/pprof/profile", http.HandlerFunc(pprof.Profile))
m.Handle("/debug/pprof/symbol", http.HandlerFunc(pprof.Symbol)) m.Handle("/debug/pprof/symbol", http.HandlerFunc(pprof.Symbol))
m.Handle("/debug/pprof/trace", http.HandlerFunc(pprof.Trace)) m.Handle("/debug/pprof/trace", http.HandlerFunc(pprof.Trace))
return http.Serve(l, m) return trapClosedConnErr(http.Serve(l, m))
} }
// Stop gracefully stops the containerd server // Stop the containerd server canceling any open connections
func (s *Server) Stop() { func (s *Server) Stop() {
s.rpc.GracefulStop() s.rpc.Stop()
} }
func loadPlugins(config *Config) ([]*plugin.Registration, error) { func loadPlugins(config *Config) ([]*plugin.Registration, error) {
@ -219,3 +220,13 @@ func interceptor(
} }
return grpc_prometheus.UnaryServerInterceptor(ctx, req, info, handler) return grpc_prometheus.UnaryServerInterceptor(ctx, req, info, handler)
} }
func trapClosedConnErr(err error) error {
if err == nil {
return nil
}
if strings.Contains(err.Error(), "use of closed network connection") {
return nil
}
return err
}