Skip to content

Commit a4b0ab8

Browse files
committed
Use retry watcher when watching events
Update k8s package
1 parent 52f2b8e commit a4b0ab8

File tree

3 files changed

+36
-30
lines changed

3 files changed

+36
-30
lines changed

go.mod

+5-6
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,9 @@ require (
7373
google.golang.org/genproto/googleapis/api v0.0.0-20250218202821-56aae31c358a
7474
google.golang.org/grpc v1.70.0
7575
google.golang.org/protobuf v1.36.5
76-
k8s.io/api v0.31.3
77-
k8s.io/apimachinery v0.31.3
78-
k8s.io/client-go v0.31.3
76+
k8s.io/api v0.32.3
77+
k8s.io/apimachinery v0.32.3
78+
k8s.io/client-go v0.32.3
7979
k8s.io/klog/v2 v2.130.1
8080
k8s.io/utils v0.0.0-20241210054802-24370beab758
8181
sigs.k8s.io/yaml v1.4.0
@@ -167,7 +167,6 @@ require (
167167
github.com/goccy/go-json v0.10.5 // indirect
168168
github.com/gogo/protobuf v1.3.2 // indirect
169169
github.com/golang/geo v0.0.0-20210211234256-740aa86cb551 // indirect
170-
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
171170
github.com/golang/protobuf v1.5.4 // indirect
172171
github.com/golang/snappy v0.0.4 // indirect
173172
github.com/google/cel-go v0.22.1 // indirect
@@ -305,15 +304,15 @@ require (
305304
gopkg.in/yaml.v3 v3.0.1 // indirect
306305
honnef.co/go/tools v0.6.0 // indirect
307306
k8s.io/apiextensions-apiserver v0.31.0 // indirect
308-
k8s.io/kube-openapi v0.0.0-20240403164606-bc84c2ddaf99 // indirect
307+
k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect
309308
modernc.org/libc v1.55.3 // indirect
310309
modernc.org/mathutil v1.6.0 // indirect
311310
modernc.org/memory v1.8.0 // indirect
312311
modernc.org/sqlite v1.34.5 // indirect
313312
mvdan.cc/gofumpt v0.7.0 // indirect
314313
sigs.k8s.io/controller-runtime v0.19.1 // indirect
315314
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect
316-
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
315+
sigs.k8s.io/structured-merge-diff/v4 v4.4.2 // indirect
317316
)
318317

319318
replace github.com/GoogleCloudPlatform/k8s-config-connector/mockgcp => ./mockgcp

go.sum

+10-10
Original file line numberDiff line numberDiff line change
@@ -885,18 +885,18 @@ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWh
885885
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
886886
honnef.co/go/tools v0.6.0 h1:TAODvD3knlq75WCp2nyGJtT4LeRV/o7NN9nYPeVJXf8=
887887
honnef.co/go/tools v0.6.0/go.mod h1:3puzxxljPCe8RGJX7BIy1plGbxEOZni5mR2aXe3/uk4=
888-
k8s.io/api v0.31.3 h1:umzm5o8lFbdN/hIXbrK9oRpOproJO62CV1zqxXrLgk8=
889-
k8s.io/api v0.31.3/go.mod h1:UJrkIp9pnMOI9K2nlL6vwpxRzzEX5sWgn8kGQe92kCE=
888+
k8s.io/api v0.32.3 h1:Hw7KqxRusq+6QSplE3NYG4MBxZw1BZnq4aP4cJVINls=
889+
k8s.io/api v0.32.3/go.mod h1:2wEDTXADtm/HA7CCMD8D8bK4yuBUptzaRhYcYEEYA3k=
890890
k8s.io/apiextensions-apiserver v0.31.0 h1:fZgCVhGwsclj3qCw1buVXCV6khjRzKC5eCFt24kyLSk=
891891
k8s.io/apiextensions-apiserver v0.31.0/go.mod h1:b9aMDEYaEe5sdK+1T0KU78ApR/5ZVp4i56VacZYEHxk=
892-
k8s.io/apimachinery v0.31.3 h1:6l0WhcYgasZ/wk9ktLq5vLaoXJJr5ts6lkaQzgeYPq4=
893-
k8s.io/apimachinery v0.31.3/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo=
894-
k8s.io/client-go v0.31.3 h1:CAlZuM+PH2cm+86LOBemaJI/lQ5linJ6UFxKX/SoG+4=
895-
k8s.io/client-go v0.31.3/go.mod h1:2CgjPUTpv3fE5dNygAr2NcM8nhHzXvxB8KL5gYc3kJs=
892+
k8s.io/apimachinery v0.32.3 h1:JmDuDarhDmA/Li7j3aPrwhpNBA94Nvk5zLeOge9HH1U=
893+
k8s.io/apimachinery v0.32.3/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE=
894+
k8s.io/client-go v0.32.3 h1:RKPVltzopkSgHS7aS98QdscAgtgah/+zmpAogooIqVU=
895+
k8s.io/client-go v0.32.3/go.mod h1:3v0+3k4IcT9bXTc4V2rt+d2ZPPG700Xy6Oi0Gdl2PaY=
896896
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
897897
k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
898-
k8s.io/kube-openapi v0.0.0-20240403164606-bc84c2ddaf99 h1:w6nThEmGo9zcL+xH1Tu6pjxJ3K1jXFW+V0u4peqN8ks=
899-
k8s.io/kube-openapi v0.0.0-20240403164606-bc84c2ddaf99/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98=
898+
k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y=
899+
k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f/go.mod h1:R/HEjbvWI0qdfb8viZUeVZm0X6IZnxAydC7YU42CMw4=
900900
k8s.io/utils v0.0.0-20241210054802-24370beab758 h1:sdbE21q2nlQtFh65saZY+rRM6x6aJJI8IUa1AmH/qa0=
901901
k8s.io/utils v0.0.0-20241210054802-24370beab758/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
902902
modernc.org/cc/v4 v4.21.4 h1:3Be/Rdo1fpr8GrQ7IVw9OHtplU4gWbb+wNgeoBMmGLQ=
@@ -931,7 +931,7 @@ sigs.k8s.io/controller-runtime v0.19.1 h1:Son+Q40+Be3QWb+niBXAg2vFiYWolDjjRfO8hn
931931
sigs.k8s.io/controller-runtime v0.19.1/go.mod h1:iRmWllt8IlaLjvTTDLhRBXIEtkCK6hwVBJJsYS9Ajf4=
932932
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE=
933933
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg=
934-
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
935-
sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
934+
sigs.k8s.io/structured-merge-diff/v4 v4.4.2 h1:MdmvkGuXi/8io6ixD5wud3vOLwc1rj0aNqRlpuvjmwA=
935+
sigs.k8s.io/structured-merge-diff/v4 v4.4.2/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4=
936936
sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
937937
sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=

internal/kubernetes/event/watcher.go

+21-14
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ import (
2222
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2323
"k8s.io/apimachinery/pkg/watch"
2424
"k8s.io/client-go/kubernetes"
25+
"k8s.io/client-go/tools/cache"
26+
watchtools "k8s.io/client-go/tools/watch"
2527
)
2628

2729
type Watcher struct {
@@ -136,35 +138,40 @@ func (w *Watcher) watch(ctx context.Context, env string, client kubernetes.Inter
136138
w.handlersCounter.Add(ctx, 1, metric.WithAttributes(attribute.String("environment", env)))
137139
defer w.handlersCounter.Add(ctx, -1, metric.WithAttributes(attribute.String("environment", env)))
138140

139-
// Events we want to watch for
140-
// SuccessfulRescale - Check for successful rescale events
141-
// Killing - Check for liveness failures
141+
newWatcher := func(selector string) (*watchtools.RetryWatcher, error) {
142+
list, err := client.EventsV1().Events("").List(ctx, metav1.ListOptions{
143+
FieldSelector: selector,
144+
Limit: 10,
145+
})
146+
if err != nil {
147+
return nil, err
148+
}
142149

143-
list, err := client.EventsV1().Events("").List(ctx, metav1.ListOptions{})
144-
if err != nil {
145-
return fmt.Errorf("failed to list events: %w", err)
150+
return watchtools.NewRetryWatcher(list.ResourceVersion, &cache.ListWatch{
151+
WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
152+
options.FieldSelector = selector
153+
return client.EventsV1().Events("").Watch(context.Background(), options)
154+
},
155+
})
146156
}
147157

148-
w.log.WithField("len", len(list.Items)).Debug("listed events")
149-
158+
// Events we want to watch for
159+
// SuccessfulRescale - Check for successful rescale events
160+
// Killing - Check for liveness failures
150161
closeAndDrain := func(w watch.Interface) {
151162
w.Stop()
152163
for range w.ResultChan() {
153164
// Drain the channel
154165
}
155166
}
156167

157-
rescale, err := client.EventsV1().Events("").Watch(ctx, metav1.ListOptions{
158-
FieldSelector: "reason=SuccessfulRescale,metadata.namespace!=nais-system",
159-
})
168+
rescale, err := newWatcher("reason=SuccessfulRescale,metadata.namespace!=nais-system")
160169
if err != nil {
161170
return fmt.Errorf("failed to watch for rescale events: %w", err)
162171
}
163172
defer closeAndDrain(rescale)
164173

165-
killing, err := client.EventsV1().Events("").Watch(ctx, metav1.ListOptions{
166-
FieldSelector: "reason=Killing,metadata.namespace!=nais-system",
167-
})
174+
killing, err := newWatcher("reason=Killing,metadata.namespace!=nais-system")
168175
if err != nil {
169176
return fmt.Errorf("failed to watch for killing events: %w", err)
170177
}

0 commit comments

Comments
 (0)