diff --git a/pkg/dynamiccontroller/dynamic_controller.go b/pkg/dynamiccontroller/dynamic_controller.go index 58b25883..3b0cb913 100644 --- a/pkg/dynamiccontroller/dynamic_controller.go +++ b/pkg/dynamiccontroller/dynamic_controller.go @@ -324,7 +324,7 @@ func (dc *DynamicController) syncFunc(ctx context.Context, oi ObjectIdentifiers, return err } -func (dc *DynamicController) enqueueParent(parentGVR schema.GroupVersionResource, obj interface{}, eventType string) { +func (dc *DynamicController) enqueueParent(parentGVR schema.GroupVersionResource, obj any, eventType string) { mobj, err := meta.Accessor(obj) if err != nil { dc.log.Error(err, "Failed to get meta for object to enqueue", "eventType", eventType) @@ -341,7 +341,7 @@ func (dc *DynamicController) enqueueParent(parentGVR schema.GroupVersionResource dc.queue.Add(oi) } -func (dc *DynamicController) updateFunc(parentGVR schema.GroupVersionResource, oldObj, newObj interface{}) { +func (dc *DynamicController) updateFunc(parentGVR schema.GroupVersionResource, oldObj, newObj any) { newMeta, err := meta.Accessor(newObj) if err != nil { dc.log.Error(err, "failed to access new object meta") @@ -529,7 +529,12 @@ func (dc *DynamicController) reconcileChildrenLocked( } w := dc.ensureWatchLocked(child) childHandlerID := childHandlerID(parent, child) - if err := w.AddHandler(dc.ctx, childHandlerID, dc.handlerForChildGVR(parent, child)); err != nil { + childHandler, err := dc.handlerForChildGVR(parent, child) + if err != nil { + return fmt.Errorf("creating child handler for %s for parent %s failed: %w", child, parent, err) + } + + if err := w.AddHandler(dc.ctx, childHandlerID, childHandler); err != nil { return fmt.Errorf("add child handler %s: %w", child, err) } reg.childHandlerIDs[child] = childHandlerID @@ -562,8 +567,12 @@ func (dc *DynamicController) removeHandlerLocked(gvr schema.GroupVersionResource return nil } -func (dc *DynamicController) handlerForChildGVR(parent, child schema.GroupVersionResource) cache.ResourceEventHandler { +func (dc *DynamicController) handlerForChildGVR(parent, child schema.GroupVersionResource) (cache.ResourceEventHandler, error) { parentGVRKey, childGVRKey := keyFromGVR(parent), keyFromGVR(child) + parentGVK, err := dc.mapper.KindFor(parent) + if err != nil { + return nil, fmt.Errorf("failed ot get parent gvk from %s for child handler: %w", parentGVRKey, err) + } handle := func(obj interface{}, eventType string) { objMeta, err := meta.Accessor(obj) if err != nil { @@ -584,11 +593,6 @@ func (dc *DynamicController) handlerForChildGVR(parent, child schema.GroupVersio return } - parentGVK, err := dc.mapper.KindFor(parent) - if err != nil { - dc.log.Error(err, "failed to get parent GVK", "parent", parentGVRKey) - return - } pom := &metav1.PartialObjectMetadata{} pom.SetGroupVersionKind(parentGVK) pom.SetName(name) @@ -609,7 +613,7 @@ func (dc *DynamicController) handlerForChildGVR(parent, child schema.GroupVersio AddFunc: func(obj interface{}) { handle(obj, eventTypeAdd) }, UpdateFunc: func(oldObj, newObj interface{}) { handle(newObj, eventTypeUpdate) }, DeleteFunc: func(obj interface{}) { handle(obj, eventTypeDelete) }, - } + }, nil } func (dc *DynamicController) gracefulShutdown() error { diff --git a/pkg/dynamiccontroller/internal/gvr_watch.go b/pkg/dynamiccontroller/internal/lazy_informer.go similarity index 100% rename from pkg/dynamiccontroller/internal/gvr_watch.go rename to pkg/dynamiccontroller/internal/lazy_informer.go diff --git a/pkg/dynamiccontroller/internal/gvr_watch_test.go b/pkg/dynamiccontroller/internal/lazy_informer_test.go similarity index 100% rename from pkg/dynamiccontroller/internal/gvr_watch_test.go rename to pkg/dynamiccontroller/internal/lazy_informer_test.go