mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 20:24:09 +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,
|
||||
type httpServer interface {
|
||||
Serve(listener net.Listener) error
|
||||
Close() error
|
||||
}
|
||||
|
||||
// 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
|
||||
}
|
||||
|
||||
func (fake *fakeHTTPServer) Close() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func mknsn(ns, name string) types.NamespacedName {
|
||||
return types.NamespacedName{
|
||||
Namespace: ns,
|
||||
|
@ -150,7 +150,6 @@ type hcInstance struct {
|
||||
nsn types.NamespacedName
|
||||
port uint16
|
||||
|
||||
listeners []net.Listener
|
||||
httpServers []httpServer
|
||||
|
||||
endpoints int // number of local endpoints for a service
|
||||
@ -162,7 +161,6 @@ func (hcI *hcInstance) listenAndServeAll(hcs *server) error {
|
||||
var listener net.Listener
|
||||
|
||||
addresses := hcs.nodeAddresses.List()
|
||||
hcI.listeners = make([]net.Listener, 0, len(addresses))
|
||||
hcI.httpServers = make([]httpServer, 0, len(addresses))
|
||||
|
||||
// for each of the node addresses start listening and serving
|
||||
@ -181,16 +179,15 @@ func (hcI *hcInstance) listenAndServeAll(hcs *server) error {
|
||||
|
||||
// start serving
|
||||
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())
|
||||
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)
|
||||
return
|
||||
}
|
||||
klog.V(3).InfoS("Healthcheck closed", "service", hcI.nsn, "address", listener.Addr())
|
||||
}(hcI, listener, httpSrv)
|
||||
|
||||
hcI.listeners = append(hcI.listeners, listener)
|
||||
hcI.httpServers = append(hcI.httpServers, httpSrv)
|
||||
}
|
||||
|
||||
@ -199,9 +196,9 @@ func (hcI *hcInstance) listenAndServeAll(hcs *server) error {
|
||||
|
||||
func (hcI *hcInstance) closeAll() error {
|
||||
errors := []error{}
|
||||
for _, listener := range hcI.listeners {
|
||||
if err := listener.Close(); err != nil {
|
||||
klog.ErrorS(err, "Error closing listener for health check service", "service", hcI.nsn, "address", listener.Addr())
|
||||
for _, server := range hcI.httpServers {
|
||||
if err := server.Close(); err != nil {
|
||||
klog.ErrorS(err, "Error closing server for health check service", "service", hcI.nsn)
|
||||
errors = append(errors, err)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user