mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 22:17:14 +00:00
Do not log errors when ServiceHealthServer is closed normally
Server.Serve() always returns a non-nil error. If it exits because the http server is closed, it will return ErrServerClosed. To differentiate the error, this patch changes to close the http server instead of the listener when the Service is deleted. Closing http server automatically closes the listener, there is no need to cache the listeners any more. Signed-off-by: Quan Tian <qtian@vmware.com>
This commit is contained in:
parent
e54e97294f
commit
a5790d5caa
@ -39,6 +39,7 @@ type httpServerFactory interface {
|
|||||||
// It is designed so that http.Server satisfies this interface,
|
// It is designed so that http.Server satisfies this interface,
|
||||||
type httpServer interface {
|
type httpServer interface {
|
||||||
Serve(listener net.Listener) error
|
Serve(listener net.Listener) error
|
||||||
|
Close() error
|
||||||
}
|
}
|
||||||
|
|
||||||
// Implement listener in terms of net.Listen.
|
// Implement listener in terms of net.Listen.
|
||||||
|
@ -104,6 +104,10 @@ func (fake *fakeHTTPServer) Serve(listener net.Listener) error {
|
|||||||
return nil // Cause the goroutine to return
|
return nil // Cause the goroutine to return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (fake *fakeHTTPServer) Close() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func mknsn(ns, name string) types.NamespacedName {
|
func mknsn(ns, name string) types.NamespacedName {
|
||||||
return types.NamespacedName{
|
return types.NamespacedName{
|
||||||
Namespace: ns,
|
Namespace: ns,
|
||||||
|
@ -150,7 +150,6 @@ type hcInstance struct {
|
|||||||
nsn types.NamespacedName
|
nsn types.NamespacedName
|
||||||
port uint16
|
port uint16
|
||||||
|
|
||||||
listeners []net.Listener
|
|
||||||
httpServers []httpServer
|
httpServers []httpServer
|
||||||
|
|
||||||
endpoints int // number of local endpoints for a service
|
endpoints int // number of local endpoints for a service
|
||||||
@ -162,7 +161,6 @@ func (hcI *hcInstance) listenAndServeAll(hcs *server) error {
|
|||||||
var listener net.Listener
|
var listener net.Listener
|
||||||
|
|
||||||
addresses := hcs.nodeAddresses.List()
|
addresses := hcs.nodeAddresses.List()
|
||||||
hcI.listeners = make([]net.Listener, 0, len(addresses))
|
|
||||||
hcI.httpServers = make([]httpServer, 0, len(addresses))
|
hcI.httpServers = make([]httpServer, 0, len(addresses))
|
||||||
|
|
||||||
// for each of the node addresses start listening and serving
|
// for each of the node addresses start listening and serving
|
||||||
@ -181,16 +179,15 @@ func (hcI *hcInstance) listenAndServeAll(hcs *server) error {
|
|||||||
|
|
||||||
// start serving
|
// start serving
|
||||||
go func(hcI *hcInstance, listener net.Listener, httpSrv httpServer) {
|
go func(hcI *hcInstance, listener net.Listener, httpSrv httpServer) {
|
||||||
// Serve() will exit when the listener is closed.
|
// Serve() will exit and return ErrServerClosed when the http server is closed.
|
||||||
klog.V(3).InfoS("Starting goroutine for healthcheck", "service", hcI.nsn, "address", listener.Addr())
|
klog.V(3).InfoS("Starting goroutine for healthcheck", "service", hcI.nsn, "address", listener.Addr())
|
||||||
if err := httpSrv.Serve(listener); err != nil {
|
if err := httpSrv.Serve(listener); err != nil && err != http.ErrServerClosed {
|
||||||
klog.ErrorS(err, "Healthcheck closed", "service", hcI.nsn)
|
klog.ErrorS(err, "Healthcheck closed", "service", hcI.nsn)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
klog.V(3).InfoS("Healthcheck closed", "service", hcI.nsn, "address", listener.Addr())
|
klog.V(3).InfoS("Healthcheck closed", "service", hcI.nsn, "address", listener.Addr())
|
||||||
}(hcI, listener, httpSrv)
|
}(hcI, listener, httpSrv)
|
||||||
|
|
||||||
hcI.listeners = append(hcI.listeners, listener)
|
|
||||||
hcI.httpServers = append(hcI.httpServers, httpSrv)
|
hcI.httpServers = append(hcI.httpServers, httpSrv)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -199,9 +196,9 @@ func (hcI *hcInstance) listenAndServeAll(hcs *server) error {
|
|||||||
|
|
||||||
func (hcI *hcInstance) closeAll() error {
|
func (hcI *hcInstance) closeAll() error {
|
||||||
errors := []error{}
|
errors := []error{}
|
||||||
for _, listener := range hcI.listeners {
|
for _, server := range hcI.httpServers {
|
||||||
if err := listener.Close(); err != nil {
|
if err := server.Close(); err != nil {
|
||||||
klog.ErrorS(err, "Error closing listener for health check service", "service", hcI.nsn, "address", listener.Addr())
|
klog.ErrorS(err, "Error closing server for health check service", "service", hcI.nsn)
|
||||||
errors = append(errors, err)
|
errors = append(errors, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user