Skip to content

Commit fa484e5

Browse files
authored
fix: Ordered Managed Dependent IT and filtering (#1133)
1 parent 2371b4f commit fa484e5

File tree

4 files changed

+17
-2
lines changed

4 files changed

+17
-2
lines changed

docs/documentation/dependent-resources.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,4 +293,7 @@ makes sure that it or the related `InformerEventSource` always return the up-to-
293293
the reconciliation, the later received related event will not trigger the reconciliation again. This is a small
294294
optimization. For example if during a reconciliation a `ConfigMap` is updated using dependent resources, this won't
295295
trigger a new reconciliation. It' does not need to, since the change in the `ConfigMap` is made by the reconciler,
296-
and the fresh version is used further.
296+
and the fresh version is used further. To work properly, it is also required that all the changes are received only by
297+
one event source (this is a best practice in general) - so for example if there are two config map dependents, either
298+
there should be a shared event source between them, or a label selector on the event sources just to selecting related
299+
events, see in [related integration test](https://github.com/java-operator-sdk/java-operator-sdk/blob/cd8d7e94f9d3f5d9f28dddbbb10f692546c22c9c/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/orderedmanageddependent/ConfigMapDependentResource1.java#L15-L15).

operator-framework/src/test/java/io/javaoperatorsdk/operator/OrderedManagedDependentIT.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class OrderedManagedDependentIT {
2626
void managedDependentsAreReconciledInOrder() {
2727
operator.create(OrderedManagedDependentCustomResource.class, createTestResource());
2828

29-
await().atMost(Duration.ofSeconds(5))
29+
await().pollDelay(Duration.ofSeconds(1)).atMost(Duration.ofSeconds(5))
3030
.until(() -> ((OrderedManagedDependentTestReconciler) operator.getFirstReconciler())
3131
.getNumberOfExecutions() == 1);
3232

operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/orderedmanageddependent/ConfigMapDependentResource1.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
package io.javaoperatorsdk.operator.sample.orderedmanageddependent;
22

33
import java.util.HashMap;
4+
import java.util.Map;
45

56
import io.fabric8.kubernetes.api.model.ConfigMap;
67
import io.fabric8.kubernetes.api.model.ObjectMeta;
78
import io.javaoperatorsdk.operator.api.reconciler.Context;
89
import io.javaoperatorsdk.operator.api.reconciler.dependent.ReconcileResult;
910
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUKubernetesDependentResource;
11+
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent;
1012
import io.javaoperatorsdk.operator.processing.event.ResourceID;
1113
import io.javaoperatorsdk.operator.processing.event.source.PrimaryToSecondaryMapper;
1214

15+
@KubernetesDependent(labelSelector = "dependent = cm1")
1316
public class ConfigMapDependentResource1 extends
1417
CRUKubernetesDependentResource<ConfigMap, OrderedManagedDependentCustomResource>
1518
implements PrimaryToSecondaryMapper<OrderedManagedDependentCustomResource> {
@@ -31,6 +34,9 @@ protected ConfigMap desired(OrderedManagedDependentCustomResource primary,
3134

3235
ConfigMap configMap = new ConfigMap();
3336
configMap.setMetadata(new ObjectMeta());
37+
Map<String, String> labels = new HashMap<>();
38+
labels.put("dependent", "cm1");
39+
configMap.getMetadata().setLabels(labels);
3440
configMap.getMetadata().setName(primary.getMetadata().getName() + "1");
3541
configMap.getMetadata().setNamespace(primary.getMetadata().getNamespace());
3642
HashMap<String, String> data = new HashMap<>();

operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/orderedmanageddependent/ConfigMapDependentResource2.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
package io.javaoperatorsdk.operator.sample.orderedmanageddependent;
22

33
import java.util.HashMap;
4+
import java.util.Map;
45

56
import io.fabric8.kubernetes.api.model.ConfigMap;
67
import io.fabric8.kubernetes.api.model.ObjectMeta;
78
import io.javaoperatorsdk.operator.api.reconciler.Context;
89
import io.javaoperatorsdk.operator.api.reconciler.dependent.ReconcileResult;
910
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUKubernetesDependentResource;
11+
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent;
1012
import io.javaoperatorsdk.operator.processing.event.ResourceID;
1113
import io.javaoperatorsdk.operator.processing.event.source.PrimaryToSecondaryMapper;
1214

15+
@KubernetesDependent(labelSelector = "dependent = cm2")
1316
public class ConfigMapDependentResource2 extends
1417
CRUKubernetesDependentResource<ConfigMap, OrderedManagedDependentCustomResource>
1518
implements PrimaryToSecondaryMapper<OrderedManagedDependentCustomResource> {
@@ -31,6 +34,9 @@ protected ConfigMap desired(OrderedManagedDependentCustomResource primary,
3134

3235
ConfigMap configMap = new ConfigMap();
3336
configMap.setMetadata(new ObjectMeta());
37+
Map<String, String> labels = new HashMap<>();
38+
labels.put("dependent", "cm2");
39+
configMap.getMetadata().setLabels(labels);
3440
configMap.getMetadata().setName(primary.getMetadata().getName() + "2");
3541
configMap.getMetadata().setNamespace(primary.getMetadata().getNamespace());
3642
HashMap<String, String> data = new HashMap<>();

0 commit comments

Comments
 (0)