@@ -156,7 +156,7 @@ func (cl *Client) addCRD(name string, opts krt.OptionsBuilder) {
156156 cl .logger .Debugf ("addCRD: adding CRD %q" , name )
157157 s , f := cl .schemasByCRDName [name ]
158158 if ! f {
159- cl .logger .Debugf ("Added resource that we are not watching: %v" , name )
159+ cl .logger .Debugf ("added resource that we are not watching: %v" , name )
160160 return
161161 }
162162 resourceGVK := s .GroupVersionKind ()
@@ -201,23 +201,18 @@ func (cl *Client) addCRD(name string, opts krt.OptionsBuilder) {
201201 ObjectTransform : transform ,
202202 FieldSelector : fieldSelector ,
203203 }
204- cl .logger .Debugf ("created filter for %v (namespaceFilter=%v, extraFilter=%v, fieldSelector=%v)" , resourceGVK , namespaceFilter != nil , extraFilter != nil , fieldSelector )
204+ if resourceGVK == gvk .KubernetesGateway {
205+ filter .ObjectFilter = kubetypes .ComposeFilters (namespaceFilter , extraFilter )
206+ }
205207
206208 var kc kclient.Untyped
207209 if s .IsBuiltin () {
208210 kc = kclient .NewUntypedInformer (cl .client , gvr , filter )
209211 } else {
210- // For DestinationRule and VirtualService, we use Dynamic client which returns unstructured objects
211- // So we need to use DynamicInformer type to ensure the informer expects unstructured objects
212- informerType := kubetypes .StandardInformer
213- if resourceGVK == gvk .DestinationRule || resourceGVK == gvk .VirtualService || resourceGVK == gvk .PeerAuthentication {
214- informerType = kubetypes .DynamicInformer
215- cl .logger .Debugf ("using DynamicInformer for %v (uses Dynamic client)" , resourceGVK )
216- }
217212 kc = kclient .NewDelayedInformer [controllers.Object ](
218213 cl .client ,
219214 gvr ,
220- informerType ,
215+ kubetypes . StandardInformer ,
221216 filter ,
222217 )
223218 }
@@ -226,58 +221,18 @@ func (cl *Client) addCRD(name string, opts krt.OptionsBuilder) {
226221 collection := krt .MapCollection (wrappedClient , func (obj controllers.Object ) config.Config {
227222 cfg := translateFunc (obj )
228223 cfg .Domain = cl .domainSuffix
229- // Only log at Debug level to avoid spam, but keep it available for diagnosis
230- cl .logger .Debugf ("MapCollection translating object %s/%s to config for %v" , obj .GetNamespace (), obj .GetName (), resourceGVK )
231224 return cfg
232225 }, opts .WithName ("collection/" + resourceGVK .Kind )... )
233226 index := krt .NewNamespaceIndex (collection )
234- // Register a debug handler to track all events from the wrappedClient (before MapCollection)
235- // This helps diagnose if events are being filtered before reaching the collection
236- wrappedClientDebugHandler := wrappedClient .RegisterBatch (func (o []krt.Event [controllers.Object ]) {
237- if len (o ) > 0 {
238- cl .logger .Debugf ("wrappedClient event detected for %v: %d events" , resourceGVK , len (o ))
239- for i , event := range o {
240- var nameStr , nsStr string
241- if event .New != nil {
242- obj := * event .New
243- nameStr = obj .GetName ()
244- nsStr = obj .GetNamespace ()
245- } else if event .Old != nil {
246- obj := * event .Old
247- nameStr = obj .GetName ()
248- nsStr = obj .GetNamespace ()
249- }
250- cl .logger .Debugf ("wrappedClient event[%d] %s for %v (name=%s/%s)" ,
251- i , event .Event , resourceGVK , nsStr , nameStr )
252- }
253- }
254- }, false )
255- // Register a debug handler to track all events from the collection
256- // This helps diagnose why new config changes might not trigger events
257- // Use false to match Dubbo's implementation - only process future events, not initial sync
258- debugHandler := collection .RegisterBatch (func (o []krt.Event [config.Config ]) {
259- if len (o ) > 0 {
260- cl .logger .Debugf ("collection event detected for %v: %d events" , resourceGVK , len (o ))
261- for i , event := range o {
262- var nameStr , nsStr string
263- if event .New != nil {
264- nameStr = event .New .Name
265- nsStr = event .New .Namespace
266- } else if event .Old != nil {
267- nameStr = event .Old .Name
268- nsStr = event .Old .Namespace
269- }
270- cl .logger .Debugf ("collection event[%d] %s for %v (name=%s/%s)" ,
271- i , event .Event , resourceGVK , nsStr , nameStr )
272- }
273- }
274- }, false )
275227 cl .kinds [resourceGVK ] = nsStore {
276228 collection : collection ,
277229 index : index ,
278230 handlers : []krt.HandlerRegistration {
279- wrappedClientDebugHandler ,
280- debugHandler ,
231+ collection .RegisterBatch (func (o []krt.Event [config.Config ]) {
232+ // for _, event := range o {
233+ // incrementEvent(resourceGVK.Kind, event.Event.String())
234+ // }
235+ }, false ),
281236 },
282237 }
283238}
@@ -294,55 +249,23 @@ func (cl *Client) Schemas() collection.Schemas {
294249}
295250
296251func (cl * Client ) RegisterEventHandler (kind config.GroupVersionKind , handler model.EventHandler ) {
297- cl .kindsMu .Lock ()
298- defer cl .kindsMu .Unlock ()
299-
300- c , ok := cl .kinds [kind ]
301- if ! ok {
302- cl .logger .Warnf ("unknown type: %s" , kind )
303- return
304- }
305-
306- cl .logger .Debugf ("Registering handler for %v" , kind )
307- handlerReg := c .collection .RegisterBatch (func (o []krt.Event [config.Config ]) {
308- cl .logger .Debugf ("batch handler triggered for %v with %d events" , kind , len (o ))
309- for i , event := range o {
310- var nameStr , nsStr string
311- if event .New != nil {
312- nameStr = event .New .Name
313- nsStr = event .New .Namespace
314- } else if event .Old != nil {
315- nameStr = event .Old .Name
316- nsStr = event .Old .Namespace
317- }
318- cl .logger .Debugf ("processing event[%d] %s for %v (name=%s/%s)" ,
319- i , event .Event , kind , nsStr , nameStr )
320- switch event .Event {
321- case controllers .EventAdd :
322- if event .New != nil {
252+ if c , ok := cl .kind (kind ); ok {
253+ c .handlers = append (c .handlers , c .collection .RegisterBatch (func (o []krt.Event [config.Config ]) {
254+ for _ , event := range o {
255+ switch event .Event {
256+ case controllers .EventAdd :
323257 handler (config.Config {}, * event .New , model .Event (event .Event ))
324- } else {
325- cl .logger .Warnf ("EventAdd but event.New is nil, skipping" )
326- }
327- case controllers .EventUpdate :
328- if event .Old != nil && event .New != nil {
258+ case controllers .EventUpdate :
329259 handler (* event .Old , * event .New , model .Event (event .Event ))
330- } else {
331- cl .logger .Warnf ("EventUpdate but event.Old or event.New is nil, skipping" )
332- }
333- case controllers .EventDelete :
334- if event .Old != nil {
260+ case controllers .EventDelete :
335261 handler (config.Config {}, * event .Old , model .Event (event .Event ))
336- } else {
337- cl .logger .Warnf ("EventDelete but event.Old is nil, skipping" )
338262 }
339263 }
340- }
341- }, false )
342- // Update handlers slice to keep reference (though not strictly necessary for functionality)
343- c .handlers = append (c .handlers , handlerReg )
344- cl .kinds [kind ] = c
345- cl .logger .Debugf ("Successfully registered handler for %v" , kind )
264+ }, false ))
265+ return
266+ }
267+
268+ cl .logger .Warnf ("unknown type: %s" , kind )
346269}
347270
348271func (cl * Client ) Get (typ config.GroupVersionKind , name , namespace string ) * config.Config {
@@ -421,43 +344,14 @@ func (cl *Client) Delete(typ config.GroupVersionKind, name, namespace string, re
421344func (cl * Client ) List (kind config.GroupVersionKind , namespace string ) []config.Config {
422345 h , f := cl .kind (kind )
423346 if ! f {
424- cl .logger .Warnf ("unknown kind %v" , kind )
425347 return nil
426348 }
427349
428- // Check if collection is synced
429- if ! h .collection .HasSynced () {
430- cl .logger .Warnf ("collection for %v is not synced yet" , kind )
431- }
432-
433- var configs []config.Config
434350 if namespace == metav1 .NamespaceAll {
435- // Get all configs from collection
436- configs = h .collection .List ()
437- cl .logger .Debugf ("found %d configs for %v (namespace=all, synced=%v)" ,
438- len (configs ), kind , h .collection .HasSynced ())
439- if len (configs ) > 0 {
440- for i , cfg := range configs {
441- cl .logger .Debugf ("config[%d] %s/%s for %v" , i , cfg .Namespace , cfg .Name , kind )
442- }
443- } else {
444- cl .logger .Debugf ("collection returned 0 configs for %v (synced=%v), this may indicate informer is not watching correctly or resources are being filtered" , kind , h .collection .HasSynced ())
445- }
446- // Log collection type for diagnosis
447- cl .logger .Debugf ("collection type is %T, HasSynced=%v" , h .collection , h .collection .HasSynced ())
448- } else {
449- configs = h .index .Lookup (namespace )
450- cl .logger .Debugf ("found %d configs for %v in namespace %s (synced=%v)" , len (configs ), kind , namespace , h .collection .HasSynced ())
451- if len (configs ) > 0 {
452- for i , cfg := range configs {
453- cl .logger .Debugf ("config[%d] %s/%s for %v" , i , cfg .Namespace , cfg .Name , kind )
454- }
455- } else {
456- cl .logger .Debugf ("found 0 configs for %v in namespace %s (synced=%v), checking if resources exist in cluster" , kind , namespace , h .collection .HasSynced ())
457- }
351+ return h .collection .List ()
458352 }
459353
460- return configs
354+ return h . index . Lookup ( namespace )
461355}
462356
463357func getObjectMetadata (config config.Config ) metav1.ObjectMeta {
0 commit comments