Skip to content

Commit abc56bf

Browse files
csvirimetacosm
andauthored
fix: startup bug, when CRs already present on cluster + renaming (#677)
* chore(deps): upgrade to fabric8 5.10.1 (#656) Mocking the version is not needed anymore. (cherry picked from commit f3b9438) * fix: startup bug, when CRs already present on cluster + renaming * feat: pass selector as String instead of parsing it This is a new feature of Fabric8 5.9+ Co-authored-by: Chris Laprun <[email protected]>
1 parent 1a48eb4 commit abc56bf

File tree

4 files changed

+19
-38
lines changed

4 files changed

+19
-38
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/internal/CustomResourceEventSource.java

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@
66
import org.slf4j.Logger;
77
import org.slf4j.LoggerFactory;
88

9+
import io.fabric8.kubernetes.api.model.KubernetesResourceList;
910
import io.fabric8.kubernetes.client.CustomResource;
1011
import io.fabric8.kubernetes.client.KubernetesClientException;
12+
import io.fabric8.kubernetes.client.dsl.FilterWatchListDeletable;
1113
import io.fabric8.kubernetes.client.informers.ResourceEventHandler;
1214
import io.fabric8.kubernetes.client.informers.SharedIndexInformer;
1315
import io.fabric8.kubernetes.client.informers.cache.Cache;
@@ -23,7 +25,6 @@
2325
import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.getName;
2426
import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.getUID;
2527
import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.getVersion;
26-
import static io.javaoperatorsdk.operator.processing.event.internal.LabelSelectorParser.parseSimpleLabelSelector;
2728

2829
/**
2930
* This is a special case since is not bound to a single custom resource
@@ -74,16 +75,16 @@ public void start() {
7475

7576
try {
7677
if (ControllerConfiguration.allNamespacesWatched(targetNamespaces)) {
77-
var informer = client.inAnyNamespace()
78-
.withLabels(parseSimpleLabelSelector(labelSelector)).inform(this);
79-
sharedIndexInformers.put(ANY_NAMESPACE_MAP_KEY, informer);
78+
final var filteredBySelectorClient = client.inAnyNamespace()
79+
.withLabelSelector(labelSelector);
80+
final var informer =
81+
createAndRunInformerFor(filteredBySelectorClient, ANY_NAMESPACE_MAP_KEY);
8082
log.debug("Registered {} -> {} for any namespace", controller, informer);
8183
} else {
8284
targetNamespaces.forEach(
8385
ns -> {
84-
var informer = client.inNamespace(ns)
85-
.withLabels(parseSimpleLabelSelector(labelSelector)).inform(this);
86-
sharedIndexInformers.put(ns, informer);
86+
final var informer = createAndRunInformerFor(
87+
client.inNamespace(ns).withLabelSelector(labelSelector), ns);
8788
log.debug("Registered {} -> {} for namespace: {}", controller, informer,
8889
ns);
8990
});
@@ -103,6 +104,15 @@ public void start() {
103104
}
104105
}
105106

107+
private SharedIndexInformer<T> createAndRunInformerFor(
108+
FilterWatchListDeletable<T, KubernetesResourceList<T>> filteredBySelectorClient, String key) {
109+
var informer = filteredBySelectorClient.runnableInformer(0);
110+
informer.addEventHandler(this);
111+
sharedIndexInformers.put(key, informer);
112+
informer.run();
113+
return informer;
114+
}
115+
106116
@Override
107117
public void stop() {
108118
for (SharedIndexInformer<T> informer : sharedIndexInformers.values()) {

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/internal/LabelSelectorParserTest.java

Lines changed: 0 additions & 29 deletions
This file was deleted.

operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/OperatorExtension.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ public String getNamespace() {
106106
}
107107

108108
@SuppressWarnings({"rawtypes"})
109-
public List<Reconciler> getControllers() {
109+
public List<Reconciler> getReconcilers() {
110110
return operator.getControllers().stream()
111111
.map(Controller::getReconciler)
112112
.collect(Collectors.toUnmodifiableList());

operator-framework/src/test/java/io/javaoperatorsdk/operator/support/TestUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,6 @@ public static void waitXms(int x) {
5858
}
5959

6060
public static int getNumberOfExecutions(OperatorExtension extension) {
61-
return ((TestExecutionInfoProvider) extension.getControllers().get(0)).getNumberOfExecutions();
61+
return ((TestExecutionInfoProvider) extension.getReconcilers().get(0)).getNumberOfExecutions();
6262
}
6363
}

0 commit comments

Comments
 (0)