From faf6dc13134811fd149c1f8f1c4ba91ab8955e19 Mon Sep 17 00:00:00 2001 From: Adrian Moisey Date: Thu, 30 Jan 2025 20:09:46 +0200 Subject: [PATCH] Add retries to runner.List() --- pkg/proxy/util/nfacct/nfacct.go | 2 +- pkg/proxy/util/nfacct/nfacct_linux.go | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/pkg/proxy/util/nfacct/nfacct.go b/pkg/proxy/util/nfacct/nfacct.go index cdb7ef4cc7c..fa15a8860ef 100644 --- a/pkg/proxy/util/nfacct/nfacct.go +++ b/pkg/proxy/util/nfacct/nfacct.go @@ -31,6 +31,6 @@ type Interface interface { Add(name string) error // Get retrieves the nfacct counter with the specified name, returning an error if it doesn't exist. Get(name string) (*Counter, error) - // List retrieves all nfacct counters. + // List retrieves nfacct counters, it could receive all counters or a subset of them with an unix.EINTR error. List() ([]*Counter, error) } diff --git a/pkg/proxy/util/nfacct/nfacct_linux.go b/pkg/proxy/util/nfacct/nfacct_linux.go index a5fb7ccecb9..4a91e84aa63 100644 --- a/pkg/proxy/util/nfacct/nfacct_linux.go +++ b/pkg/proxy/util/nfacct/nfacct_linux.go @@ -29,6 +29,9 @@ import ( "github.com/vishvananda/netlink/nl" "golang.org/x/sys/unix" + + "k8s.io/client-go/util/retry" + "k8s.io/kubernetes/pkg/proxy/util" ) // MaxLength represents the maximum length allowed for the name in a nfacct counter. @@ -146,9 +149,15 @@ func (r *runner) Get(name string) (*Counter, error) { // List is part of the interface. func (r *runner) List() ([]*Counter, error) { - req := r.handler.newRequest(cmdGet, unix.NLM_F_REQUEST|unix.NLM_F_DUMP) - msgs, err := req.Execute(unix.NETLINK_NETFILTER, 0) - if err != nil { + var err error + var msgs [][]byte + err = retry.OnError(util.MaxAttemptsEINTR, util.ShouldRetryOnEINTR, func() error { + req := r.handler.newRequest(cmdGet, unix.NLM_F_REQUEST|unix.NLM_F_DUMP) + msgs, err = req.Execute(unix.NETLINK_NETFILTER, 0) + return err + }) + + if err != nil && !errors.Is(err, unix.EINTR) { return nil, handleError(err) } @@ -160,7 +169,7 @@ func (r *runner) List() ([]*Counter, error) { } counters = append(counters, counter) } - return counters, nil + return counters, err } var ErrObjectNotFound = errors.New("object not found")