From 4c686903108434a8add2795769e6519a6023d4d3 Mon Sep 17 00:00:00 2001 From: gardener-robot-ci-1 Date: Fri, 7 Mar 2025 08:13:18 +0000 Subject: [PATCH 1/3] Prepare next Development Cycle v1.113.2-dev --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 6da39fa5068..8e98fc6a487 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v1.113.1 \ No newline at end of file +v1.113.2-dev \ No newline at end of file From 8a6ff9edac2eae9c1c4b2005e90d21b0c14d039b Mon Sep 17 00:00:00 2001 From: Gardener Prow Robot Date: Thu, 20 Mar 2025 08:43:37 +0100 Subject: [PATCH 2/3] Ignore "not found" errors when listing non-existent CRDs (#11709) Similar to https://github.com/gardener/gardener/blob/90d1a8264468b1e3aca1a5afe33b8e6d344e94ea/pkg/component/etcd/etcd/crd.go#L70 and other places. This is because the REST mapper might operate on stale data, i.e., when a CRD it once discovered got deleted and it tries to list it again, the result is a "404 Not Found" error instead of the expected "no match" error. Without this, the reconciler might fail: ``` {"level":"error","ts":"2025-03-19T13:00:04.820Z","msg":"Reconciler error","controller":"garbage-collector","namespace":"","name":"","reconcileID":"8dd07cc5-eec4-402b-ba0c-ccd5688fdce9","error":"Timeout: failed waiting for *v1.PartialObjectMetadata Informer to sync","stacktrace":"sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).reconcileHandler\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.20.2/pkg/internal/controller/controller.go:341\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).processNextWorkItem\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.20.2/pkg/internal/controller/controller.go:288\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).Start.func2.2\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.20.2/pkg/internal/controller/controller.go:249"} {"level":"error","ts":"2025-03-19T12:57:06.871Z","msg":"Unhandled Error","logger":"UnhandledError","error":"pkg/mod/k8s.io/client-go@v0.32.2/tools/cache/reflector.go:251: Failed to watch *v1.PartialObjectMetadata: failed to list *v1.PartialObjectMetadata: the server could not find the requested resource","stacktrace":"k8s.io/client-go/tools/cache.DefaultWatchErrorHandler\n\t/go/pkg/mod/k8s.io/client-go@v0.32.2/tools/cache/reflector.go:166\nk8s.io/client-go/tools/cache.(*Reflector).Run.func1\n\t/go/pkg/mod/k8s.io/client-go@v0.32.2/tools/cache/reflector.go:316\nk8s.io/apimachinery/pkg/util/wait.BackoffUntil.func1\n\t/go/pkg/mod/k8s.io/apimachinery@v0.32.2/pkg/util/wait/backoff.go:226\nk8s.io/apimachinery/pkg/util/wait.BackoffUntil\n\t/go/pkg/mod/k8s.io/apimachinery@v0.32.2/pkg/util/wait/backoff.go:227\nk8s.io/client-go/tools/cache.(*Reflector).Run\n\t/go/pkg/mod/k8s.io/client-go@v0.32.2/tools/cache/reflector.go:314\nk8s.io/client-go/tools/cache.(*controller).Run.(*Group).StartWithChannel.func2\n\t/go/pkg/mod/k8s.io/apimachinery@v0.32.2/pkg/util/wait/wait.go:55\nk8s.io/apimachinery/pkg/util/wait.(*Group).Start.func1\n\t/go/pkg/mod/k8s.io/apimachinery@v0.32.2/pkg/util/wait/wait.go:72"} {"level":"info","ts":"2025-03-19T12:57:07.847Z","msg":"pkg/mod/k8s.io/client-go@v0.32.2/tools/cache/reflector.go:251: failed to list *v1.PartialObjectMetadata: the server could not find the requested resource"} ``` Co-authored-by: rfranzke --- .../controller/garbagecollector/reconciler.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/pkg/resourcemanager/controller/garbagecollector/reconciler.go b/pkg/resourcemanager/controller/garbagecollector/reconciler.go index 67ee32a5739..7674927a83f 100644 --- a/pkg/resourcemanager/controller/garbagecollector/reconciler.go +++ b/pkg/resourcemanager/controller/garbagecollector/reconciler.go @@ -6,6 +6,7 @@ package garbagecollector import ( "context" + "fmt" "time" "github.com/hashicorp/go-multierror" @@ -13,6 +14,7 @@ import ( appsv1 "k8s.io/api/apps/v1" batchv1 "k8s.io/api/batch/v1" corev1 "k8s.io/api/core/v1" + apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" @@ -62,7 +64,7 @@ func (r *Reconciler) Reconcile(reconcileCtx context.Context, _ reconcile.Request objList := &metav1.PartialObjectMetadataList{} objList.SetGroupVersionKind(corev1.SchemeGroupVersion.WithKind(resource.listKind)) if err := r.TargetClient.List(ctx, objList, labels); err != nil { - return reconcile.Result{}, err + return reconcile.Result{}, fmt.Errorf("failed listing %ss: %w", resource.kind, err) } for _, obj := range objList.Items { @@ -93,8 +95,10 @@ func (r *Reconciler) Reconcile(reconcileCtx context.Context, _ reconcile.Request objList := &metav1.PartialObjectMetadataList{} objList.SetGroupVersionKind(gvk) if err := r.TargetClient.List(ctx, objList); err != nil { - if !meta.IsNoMatchError(err) { - return reconcile.Result{}, err + // Need to check for both error types. The DynamicRestMapper can hold a stale cache returning a path to a + // non-existing api-resource leading to a NotFound error. + if !meta.IsNoMatchError(err) && !apierrors.IsNotFound(err) { + return reconcile.Result{}, fmt.Errorf("failed listing objects of gvk %s: %w", gvk, err) } } items = append(items, objList.Items...) From 13a660e6e62e63d631f6c6f09e3a65aa6e65b14c Mon Sep 17 00:00:00 2001 From: gardener-robot-ci-1 Date: Thu, 20 Mar 2025 15:15:39 +0000 Subject: [PATCH 3/3] Release v1.113.2 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 8e98fc6a487..6cecd13a9f3 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v1.113.2-dev \ No newline at end of file +v1.113.2 \ No newline at end of file