From c61fb89d3fd60bdb218b6aa5cda4c87fb3e3e57c Mon Sep 17 00:00:00 2001 From: Kevin Pollet Date: Mon, 6 Oct 2025 08:58:04 +0200 Subject: [PATCH] Use k8s.ResourceEventHandler for Gateway API provider --- pkg/provider/kubernetes/gateway/client.go | 29 ++--------------------- 1 file changed, 2 insertions(+), 27 deletions(-) diff --git a/pkg/provider/kubernetes/gateway/client.go b/pkg/provider/kubernetes/gateway/client.go index 6c704e99e..109a0f9d7 100644 --- a/pkg/provider/kubernetes/gateway/client.go +++ b/pkg/provider/kubernetes/gateway/client.go @@ -10,6 +10,7 @@ import ( "time" "github.com/rs/zerolog/log" + "github.com/traefik/traefik/v3/pkg/provider/kubernetes/k8s" "github.com/traefik/traefik/v3/pkg/types" corev1 "k8s.io/api/core/v1" discoveryv1 "k8s.io/api/discovery/v1" @@ -33,22 +34,6 @@ import ( const resyncPeriod = 10 * time.Minute -type resourceEventHandler struct { - ev chan<- interface{} -} - -func (reh *resourceEventHandler) OnAdd(obj interface{}, _ bool) { - eventHandlerFunc(reh.ev, obj) -} - -func (reh *resourceEventHandler) OnUpdate(_, newObj interface{}) { - eventHandlerFunc(reh.ev, newObj) -} - -func (reh *resourceEventHandler) OnDelete(obj interface{}) { - eventHandlerFunc(reh.ev, obj) -} - type clientWrapper struct { csGateway gateclientset.Interface csKube kclientset.Interface @@ -145,7 +130,7 @@ func newExternalClusterClient(endpoint, caFilePath string, token types.FileOrCon // WatchAll starts namespace-specific controllers for all relevant kinds. func (c *clientWrapper) WatchAll(namespaces []string, stopCh <-chan struct{}) (<-chan interface{}, error) { eventCh := make(chan interface{}, 1) - eventHandler := &resourceEventHandler{ev: eventCh} + eventHandler := &k8s.ResourceEventHandler{Ev: eventCh} if len(namespaces) == 0 { namespaces = []string{metav1.NamespaceAll} @@ -815,16 +800,6 @@ func (c *clientWrapper) isWatchedNamespace(namespace string) bool { return slices.Contains(c.watchedNamespaces, namespace) } -// eventHandlerFunc will pass the obj on to the events channel or drop it. -// This is so passing the events along won't block in the case of high volume. -// The events are only used for signaling anyway so dropping a few is ok. -func eventHandlerFunc(events chan<- interface{}, obj interface{}) { - select { - case events <- obj: - default: - } -} - // translateNotFoundError will translate a "not found" error to a boolean return // value which indicates if the resource exists and a nil error. func translateNotFoundError(err error) (bool, error) {