From 07d2a32ca8740cbf8193e23c512d1e2944cf5edc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Attila=20M=C3=A9sz=C3=A1ros?= Date: Wed, 29 Jul 2026 17:56:12 +0200 Subject: [PATCH] fix: do not eagerly evaluate the cluster-scoped fallback in KubernetesResourceFetcher `fetchResource` selected between a namespaced and a cluster-scoped lookup with `Optional.orElse`: return resourceId.getNamespace() .map(ns -> client.resources(rClass).inNamespace(ns).withName(name).get()) .orElse(client.resources(rClass).withName(name).get()); `orElse` evaluates its argument unconditionally, so every namespaced lookup also performed the cluster-scoped GET. For a namespaced resource type that second request either queries whichever namespace the client happens to default to or fails outright, and its result is then thrown away. This runs on the `BoundedItemStore` cache-miss path (`refreshMissingStateFromServer`), so it doubles the API server requests for every bounded-cache refresh of a namespaced resource. Switches to `orElseGet` so the fallback is only evaluated for cluster-scoped resource ids. --- .../event/source/cache/KubernetesResourceFetcher.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/cache/KubernetesResourceFetcher.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/cache/KubernetesResourceFetcher.java index f0f4557701..90b65f1bcb 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/cache/KubernetesResourceFetcher.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/cache/KubernetesResourceFetcher.java @@ -45,7 +45,7 @@ public R fetchResource(String key) { return resourceId .getNamespace() .map(ns -> client.resources(rClass).inNamespace(ns).withName(resourceId.getName()).get()) - .orElse(client.resources(rClass).withName(resourceId.getName()).get()); + .orElseGet(() -> client.resources(rClass).withName(resourceId.getName()).get()); } public static Function inverseNamespaceKeyFunction() {