@@ -39,6 +39,7 @@ import (
3939 "github.com/kube-bind/kube-bind/pkg/indexers"
4040 "github.com/kube-bind/kube-bind/pkg/konnector/controllers/cluster/serviceexport/multinsinformer"
4141 "github.com/kube-bind/kube-bind/pkg/konnector/controllers/dynamic"
42+ "github.com/kube-bind/kube-bind/pkg/resources"
4243 kubebindv1alpha2 "github.com/kube-bind/kube-bind/sdk/apis/kubebind/v1alpha2"
4344 bindclientset "github.com/kube-bind/kube-bind/sdk/client/clientset/versioned"
4445 bindlisters "github.com/kube-bind/kube-bind/sdk/client/listers/kubebind/v1alpha2"
@@ -105,6 +106,8 @@ func NewController(
105106
106107 providerNamespace : providerNamespace ,
107108
109+ namespaceCreationNotifyChan : namespaceCreationNotifyChan ,
110+
108111 readReconciler : readReconciler {
109112 getServiceNamespace : func (upstreamNamespace string ) (* kubebindv1alpha2.APIServiceNamespace , error ) {
110113 sns , err := serviceNamespaceInformer .Informer ().GetIndexer ().ByIndex (indexers .ServiceNamespaceByNamespace , upstreamNamespace )
@@ -207,43 +210,7 @@ type controller struct {
207210}
208211
209212func (c * controller ) isClaimed (obj * unstructured.Unstructured ) bool {
210- // Empty selector selects everything
211- if c .claim .Selector .LabelSelector == nil && len (c .claim .Selector .NamedResource ) == 0 {
212- return true
213- }
214-
215- // Both label selector and named resources must match if both are specified
216- labelSelectorMatches := true
217- namedResourceMatches := true
218-
219- // Check label selector if specified
220- if c .claim .Selector .LabelSelector != nil {
221- selector , err := metav1 .LabelSelectorAsSelector (c .claim .Selector .LabelSelector )
222- if err != nil {
223- return false
224- }
225- l := obj .GetLabels ()
226- if l == nil {
227- l = make (map [string ]string )
228- }
229- labelSelectorMatches = selector .Matches (labels .Set (l ))
230- }
231-
232- // Check named resources if specified
233- if len (c .claim .Selector .NamedResource ) > 0 {
234- namedResourceMatches = false // Default to false, must match at least one
235- for _ , nr := range c .claim .Selector .NamedResource {
236- if nr .Namespace != "" && nr .Namespace != obj .GetNamespace () {
237- continue
238- }
239- if nr .Name == obj .GetName () {
240- namedResourceMatches = true
241- break
242- }
243- }
244- }
245-
246- return labelSelectorMatches && namedResourceMatches
213+ return resources .IsClaimed (c .claim .Selector , obj )
247214}
248215
249216func (c * controller ) enqueueConsumer (logger klog.Logger , obj interface {}) {
@@ -306,6 +273,19 @@ func (c *controller) enqueueConsumerByKey(logger klog.Logger, key string) {
306273}
307274
308275func (c * controller ) enqueueProvider (logger klog.Logger , obj interface {}) {
276+ // handle tombstones
277+ if tombstone , ok := obj .(cache.DeletedFinalStateUnknown ); ok {
278+ obj = tombstone .Obj
279+ }
280+ o , ok := obj .(* unstructured.Unstructured )
281+ if ! ok {
282+ runtime .HandleError (fmt .Errorf ("unexpected type %T in enqueueProvider" , obj ))
283+ return
284+ }
285+ if ! c .isClaimed (o ) {
286+ return
287+ }
288+
309289 providerKey , err := cache .DeletionHandlingMetaNamespaceKeyFunc (obj )
310290 if err != nil {
311291 runtime .HandleError (err )
@@ -372,6 +352,16 @@ func (c *controller) enqueueServiceNamespace(logger klog.Logger, obj interface{}
372352 return
373353 }
374354 for _ , obj := range objs {
355+ unstructuredObj , ok := obj .(* unstructured.Unstructured )
356+ if ! ok {
357+ continue
358+ }
359+
360+ // Check if the provider object is actually claimed using the full selector logic.
361+ if ! c .isClaimed (unstructuredObj ) {
362+ continue
363+ }
364+
375365 key , err := cache .MetaNamespaceKeyFunc (obj )
376366 if err != nil {
377367 runtime .HandleError (err )
@@ -402,7 +392,10 @@ func (c *controller) enqueueServiceNamespace(logger klog.Logger, obj interface{}
402392 return
403393 }
404394 for _ , obj := range objects {
405- logger .Info ("enqueueing consumer object" , "obj" , obj )
395+ // Check if the object is actually claimed using the full selector logic
396+ if ! c .isClaimed (obj ) {
397+ continue
398+ }
406399
407400 key , err := cache .DeletionHandlingMetaNamespaceKeyFunc (obj )
408401 if err != nil {
0 commit comments