@@ -16,6 +16,7 @@ import (
1616 "github.com/davidmdm/x/xruntime"
1717 "github.com/davidmdm/x/xsync"
1818
19+ kerrors "k8s.io/apimachinery/pkg/api/errors"
1920 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
2021 "k8s.io/apimachinery/pkg/labels"
2122 "k8s.io/apimachinery/pkg/runtime"
@@ -61,6 +62,7 @@ type HandleFunc func(context.Context, Event) (Result, error)
6162type gkstate struct {
6263 handler HandleFunc
6364 lister kcache.GenericLister
65+ filter func (Event ) bool
6466 shutdown func ()
6567}
6668
@@ -131,10 +133,8 @@ func (instance *Instance) register(entry Entry) error {
131133 Namespace : resource .GetNamespace (),
132134 GroupKind : entry .GroupKind ,
133135 }
134- if entry .Filter == nil || entry .Filter (event ) {
135- instance .events .Enqueue (event )
136- op (event )
137- }
136+ instance .events .Enqueue (event )
137+ op (event )
138138 }
139139 }
140140
@@ -149,10 +149,8 @@ func (instance *Instance) register(entry Entry) error {
149149 Namespace : next .GetNamespace (),
150150 GroupKind : entry .GroupKind ,
151151 }
152- if entry .Filter == nil || entry .Filter (event ) {
153- instance .events .Enqueue (event )
154- resourceMap .Add (event )
155- }
152+ instance .events .Enqueue (event )
153+ resourceMap .Add (event )
156154 }
157155
158156 eventHandlers := kcache.ResourceEventHandlerFuncs {
@@ -179,9 +177,7 @@ func (instance *Instance) register(entry Entry) error {
179177 GroupKind : entry .GroupKind ,
180178 }
181179 if resourceMap .Has (evt ) {
182- if entry .Filter == nil || entry .Filter (evt ) {
183- instance .events .Enqueue (evt )
184- }
180+ instance .events .Enqueue (evt )
185181 }
186182 }
187183
@@ -211,6 +207,7 @@ func (instance *Instance) register(entry Entry) error {
211207 }
212208 }),
213209 lister : lister ,
210+ filter : entry .Filter ,
214211 },
215212 )
216213
@@ -257,6 +254,10 @@ func (instance *Instance) Run(ctx context.Context) error {
257254 return
258255 }
259256
257+ if state .filter != nil && ! state .filter (event ) {
258+ return
259+ }
260+
260261 count , _ := active .LoadOrStore (event .String (), new (atomic.Uint32 ))
261262 if count := count .Add (1 ); count > 1 {
262263 return
@@ -404,15 +405,21 @@ func safe(handler HandleFunc) HandleFunc {
404405
405406type ResourceCache [T any ] struct {
406407 lister kcache.GenericNamespaceLister
408+ filter func (Event ) bool
407409}
408410
409411func (r ResourceCache [T ]) Get (name string ) (* T , error ) {
410412 obj , err := r .lister .Get (name )
411413 if err != nil {
412414 return nil , err
413415 }
416+ raw := obj .(* unstructured.Unstructured )
417+ if r .filter != nil && ! r .filter (Event {Name : raw .GetName (), Namespace : raw .GetNamespace ()}) {
418+ gvk := raw .GetObjectKind ().GroupVersionKind ()
419+ return nil , kerrors .NewNotFound (schema.GroupResource {Group : gvk .Group , Resource : gvk .Kind }, raw .GetName ())
420+ }
414421 var result T
415- if err := runtime .DefaultUnstructuredConverter .FromUnstructured (obj .( * unstructured. Unstructured ) .Object , & result ); err != nil {
422+ if err := runtime .DefaultUnstructuredConverter .FromUnstructured (raw .Object , & result ); err != nil {
416423 return nil , err
417424 }
418425 return & result , nil
@@ -424,9 +431,13 @@ func (r ResourceCache[T]) List(selector labels.Selector) ([]*T, error) {
424431 return nil , err
425432 }
426433 result := make ([]* T , len (objects ))
427- for i , obj := range objects {
434+ for i , item := range objects {
435+ raw := item .(* unstructured.Unstructured )
436+ if r .filter != nil && ! r .filter (Event {Name : raw .GetName (), Namespace : raw .GetNamespace ()}) {
437+ continue
438+ }
428439 var value T
429- if err := runtime .DefaultUnstructuredConverter .FromUnstructured (obj .( * unstructured. Unstructured ) .Object , & value ); err != nil {
440+ if err := runtime .DefaultUnstructuredConverter .FromUnstructured (raw .Object , & value ); err != nil {
430441 return nil , err
431442 }
432443 result [i ] = & value
@@ -446,6 +457,7 @@ func Cache[T any, obj internalk8s.MetaObject[T]](ctx context.Context, gk schema.
446457 }
447458 return state .lister
448459 }(),
460+ filter : state .filter ,
449461 }
450462}
451463
0 commit comments