From 904d4e3c1511dbb5fdf486a855fb5bdf50e72878 Mon Sep 17 00:00:00 2001 From: irbekrm Date: Tue, 17 Aug 2021 08:31:49 +0100 Subject: [PATCH] Don't error if owner not found in cache Signed-off-by: irbekrm --- pkg/controller/BUILD.bazel | 1 + pkg/controller/util.go | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/pkg/controller/BUILD.bazel b/pkg/controller/BUILD.bazel index c0846e7b8..b3b986d79 100644 --- a/pkg/controller/BUILD.bazel +++ b/pkg/controller/BUILD.bazel @@ -20,6 +20,7 @@ go_library( "//pkg/logs:go_default_library", "//pkg/metrics:go_default_library", "@com_github_go_logr_logr//:go_default_library", + "@io_k8s_apimachinery//pkg/api/errors:go_default_library", "@io_k8s_apimachinery//pkg/api/resource:go_default_library", "@io_k8s_apimachinery//pkg/apis/meta/v1:go_default_library", "@io_k8s_apimachinery//pkg/runtime/schema:go_default_library", diff --git a/pkg/controller/util.go b/pkg/controller/util.go index 222403683..22aa1a977 100644 --- a/pkg/controller/util.go +++ b/pkg/controller/util.go @@ -22,6 +22,7 @@ import ( "time" "github.com/go-logr/logr" + "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/runtime" @@ -74,13 +75,20 @@ func HandleOwnedResourceNamespacedFunc(log logr.Logger, queue workqueue.RateLimi } if refGV.Group == ownerGVK.Group && ref.Kind == ownerGVK.Kind { - // TODO: how to handle namespace of owner references? - order, err := get(metaobj.GetNamespace(), ref.Name) - if err != nil { - log.Error(err, "error getting referenced owning resource") + obj, err := get(metaobj.GetNamespace(), ref.Name) + // This function is always called with a getter + // that gets from informers cache. Because this + // is also called on cache sync it may be that + // the owner is not yet in the cache. + if err != nil && errors.IsNotFound(err) { + log.Info("owning resource not found in cache") continue } - objKey, err := KeyFunc(order) + if err != nil { + log.Error(err, "error getting referenced owning resource from cache") + continue + } + objKey, err := KeyFunc(obj) if err != nil { log.Error(err, "error computing key for resource") continue