@@ -29,6 +29,9 @@ import (
29
29
30
30
"github.com/vishvananda/netlink/nl"
31
31
"golang.org/x/sys/unix"
32
+
33
+ "k8s.io/client-go/util/retry"
34
+ "k8s.io/kubernetes/pkg/proxy/util"
32
35
)
33
36
34
37
// 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) {
146
149
147
150
// List is part of the interface.
148
151
func (r * runner ) List () ([]* Counter , error ) {
149
- req := r .handler .newRequest (cmdGet , unix .NLM_F_REQUEST | unix .NLM_F_DUMP )
150
- msgs , err := req .Execute (unix .NETLINK_NETFILTER , 0 )
151
- if err != nil {
152
+ var err error
153
+ var msgs [][]byte
154
+ err = retry .OnError (util .MaxAttemptsEINTR , util .ShouldRetryOnEINTR , func () error {
155
+ req := r .handler .newRequest (cmdGet , unix .NLM_F_REQUEST | unix .NLM_F_DUMP )
156
+ msgs , err = req .Execute (unix .NETLINK_NETFILTER , 0 )
157
+ return err
158
+ })
159
+
160
+ if err != nil && ! errors .Is (err , unix .EINTR ) {
152
161
return nil , handleError (err )
153
162
}
154
163
@@ -160,7 +169,7 @@ func (r *runner) List() ([]*Counter, error) {
160
169
}
161
170
counters = append (counters , counter )
162
171
}
163
- return counters , nil
172
+ return counters , err
164
173
}
165
174
166
175
var ErrObjectNotFound = errors .New ("object not found" )
0 commit comments