diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/internal/CustomResourceEventSource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/internal/CustomResourceEventSource.java index c1391b92c7..578c6894cb 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/internal/CustomResourceEventSource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/internal/CustomResourceEventSource.java @@ -6,8 +6,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import io.fabric8.kubernetes.api.model.KubernetesResourceList; import io.fabric8.kubernetes.client.CustomResource; import io.fabric8.kubernetes.client.KubernetesClientException; +import io.fabric8.kubernetes.client.dsl.FilterWatchListDeletable; import io.fabric8.kubernetes.client.informers.ResourceEventHandler; import io.fabric8.kubernetes.client.informers.SharedIndexInformer; import io.fabric8.kubernetes.client.informers.cache.Cache; @@ -23,7 +25,6 @@ import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.getName; import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.getUID; import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.getVersion; -import static io.javaoperatorsdk.operator.processing.event.internal.LabelSelectorParser.parseSimpleLabelSelector; /** * This is a special case since is not bound to a single custom resource @@ -74,16 +75,16 @@ public void start() { try { if (ControllerConfiguration.allNamespacesWatched(targetNamespaces)) { - var informer = client.inAnyNamespace() - .withLabels(parseSimpleLabelSelector(labelSelector)).inform(this); - sharedIndexInformers.put(ANY_NAMESPACE_MAP_KEY, informer); + final var filteredBySelectorClient = client.inAnyNamespace() + .withLabelSelector(labelSelector); + final var informer = + createAndRunInformerFor(filteredBySelectorClient, ANY_NAMESPACE_MAP_KEY); log.debug("Registered {} -> {} for any namespace", controller, informer); } else { targetNamespaces.forEach( ns -> { - var informer = client.inNamespace(ns) - .withLabels(parseSimpleLabelSelector(labelSelector)).inform(this); - sharedIndexInformers.put(ns, informer); + final var informer = createAndRunInformerFor( + client.inNamespace(ns).withLabelSelector(labelSelector), ns); log.debug("Registered {} -> {} for namespace: {}", controller, informer, ns); }); @@ -103,6 +104,15 @@ public void start() { } } + private SharedIndexInformer createAndRunInformerFor( + FilterWatchListDeletable> filteredBySelectorClient, String key) { + var informer = filteredBySelectorClient.runnableInformer(0); + informer.addEventHandler(this); + sharedIndexInformers.put(key, informer); + informer.run(); + return informer; + } + @Override public void stop() { for (SharedIndexInformer informer : sharedIndexInformers.values()) { diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/internal/CustomResourceSelectorTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/internal/CustomResourceSelectorTest.java index 6a1e5144e0..ad741aa85d 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/internal/CustomResourceSelectorTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/internal/CustomResourceSelectorTest.java @@ -1,8 +1,5 @@ package io.javaoperatorsdk.operator.processing.event.internal; -import java.text.ParseException; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.Set; import java.util.concurrent.TimeUnit; @@ -18,7 +15,6 @@ import io.fabric8.kubernetes.api.model.ObjectMetaBuilder; import io.fabric8.kubernetes.client.KubernetesClient; -import io.fabric8.kubernetes.client.VersionInfo; import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient; import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer; import io.javaoperatorsdk.operator.Operator; @@ -51,24 +47,7 @@ public class CustomResourceSelectorTest { @SuppressWarnings("unchecked") @BeforeEach - void setUpResources() throws ParseException { - String buildDate = - DateTimeFormatter.ofPattern(VersionInfo.VersionKeys.BUILD_DATE_FORMAT) - .format(LocalDateTime.now()); - - server - .expect() - .get() - .withPath("/version") - .andReturn( - 200, - new VersionInfo.Builder() - .withBuildDate(buildDate) - .withMajor("1") - .withMinor("21") - .build()) - .always(); - + void setUpResources() { configurationService = spy(ConfigurationService.class); when(configurationService.checkCRDAndValidateLocalModel()).thenReturn(false); when(configurationService.getVersion()).thenReturn(new Version("1", "1", new Date())); diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/internal/LabelSelectorParserTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/internal/LabelSelectorParserTest.java deleted file mode 100644 index 3a619bbc19..0000000000 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/internal/LabelSelectorParserTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package io.javaoperatorsdk.operator.processing.event.internal; - -import org.junit.jupiter.api.Test; - -import static org.assertj.core.api.Assertions.assertThat; - -class LabelSelectorParserTest { - - @Test - public void nullParamReturnsEmptyMap() { - var res = LabelSelectorParser.parseSimpleLabelSelector(null); - assertThat(res).hasSize(0); - } - - @Test - public void emptyLabelSelectorReturnsEmptyMap() { - var res = LabelSelectorParser.parseSimpleLabelSelector(" "); - assertThat(res).hasSize(0); - } - - @Test - public void parseSimpleLabelSelector() { - var res = LabelSelectorParser.parseSimpleLabelSelector("app=foo"); - assertThat(res).hasSize(1).containsEntry("app", "foo"); - - res = LabelSelectorParser.parseSimpleLabelSelector("app=foo,owner=me"); - assertThat(res).hasSize(2).containsEntry("app", "foo").containsEntry("owner", "me"); - } -} diff --git a/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/OperatorExtension.java b/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/OperatorExtension.java index 5fed85dc67..ed19ed3ac2 100644 --- a/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/OperatorExtension.java +++ b/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/OperatorExtension.java @@ -106,7 +106,7 @@ public String getNamespace() { } @SuppressWarnings({"rawtypes"}) - public List getControllers() { + public List getReconcilers() { return operator.getControllers().stream() .map(Controller::getReconciler) .collect(Collectors.toUnmodifiableList()); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/support/TestUtils.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/support/TestUtils.java index a81cf9ce05..c2b5841d68 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/support/TestUtils.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/support/TestUtils.java @@ -58,6 +58,6 @@ public static void waitXms(int x) { } public static int getNumberOfExecutions(OperatorExtension extension) { - return ((TestExecutionInfoProvider) extension.getControllers().get(0)).getNumberOfExecutions(); + return ((TestExecutionInfoProvider) extension.getReconcilers().get(0)).getNumberOfExecutions(); } } diff --git a/pom.xml b/pom.xml index 9f29e7f03b..b788e40919 100644 --- a/pom.xml +++ b/pom.xml @@ -41,7 +41,7 @@ ${java.version} 5.8.1 - 5.8.0 + 5.10.1 1.7.32 2.14.1 4.0.0