Skip to content

Commit e17c443

Browse files
committed
added cache to configs
1 parent b497e45 commit e17c443

File tree

8 files changed

+62
-12
lines changed

8 files changed

+62
-12
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/BaseConfigurationService.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.slf4j.LoggerFactory;
1414

1515
import io.fabric8.kubernetes.api.model.HasMetadata;
16+
import io.fabric8.kubernetes.client.informers.cache.ItemStore;
1617
import io.javaoperatorsdk.operator.OperatorException;
1718
import io.javaoperatorsdk.operator.ReconcilerUtils;
1819
import io.javaoperatorsdk.operator.api.config.Utils.Configurator;
@@ -133,6 +134,10 @@ protected <P extends HasMetadata> ControllerConfiguration<P> configFor(Reconcile
133134
timeUnit = reconciliationInterval.timeUnit();
134135
}
135136

137+
final var itemStore =
138+
Utils.instantiateAndConfigureIfNeeded(annotation.itemStore(), ItemStore.class,
139+
Utils.contextFor(name), null);
140+
136141
final var config = new ResolvedControllerConfiguration<P>(
137142
resourceClass, name, generationAware,
138143
associatedReconcilerClass, retry, rateLimiter,
@@ -152,7 +157,7 @@ protected <P extends HasMetadata> ControllerConfiguration<P> configFor(Reconcile
152157
valueOrDefault(annotation,
153158
io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration::labelSelector,
154159
Constants.NO_VALUE_SET),
155-
null);
160+
null, itemStore);
156161

157162
ResourceEventFilter<P> answer = deprecatedEventFilter(annotation);
158163
config.setEventFilter(answer != null ? answer : ResourceEventFilters.passthrough());

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ControllerConfigurationOverrider.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.util.Set;
99

1010
import io.fabric8.kubernetes.api.model.HasMetadata;
11+
import io.fabric8.kubernetes.client.informers.cache.ItemStore;
1112
import io.javaoperatorsdk.operator.api.config.dependent.DependentResourceSpec;
1213
import io.javaoperatorsdk.operator.processing.event.rate.RateLimiter;
1314
import io.javaoperatorsdk.operator.processing.event.source.controller.ResourceEventFilter;
@@ -36,6 +37,7 @@ public class ControllerConfigurationOverrider<R extends HasMetadata> {
3637
private GenericFilter<R> genericFilter;
3738
private RateLimiter rateLimiter;
3839
private Map<DependentResourceSpec, Object> configurations;
40+
private ItemStore<R> itemStore;
3941

4042
private ControllerConfigurationOverrider(ControllerConfiguration<R> original) {
4143
finalizer = original.getFinalizerName();
@@ -152,6 +154,11 @@ public ControllerConfigurationOverrider<R> withGenericFilter(GenericFilter<R> ge
152154
return this;
153155
}
154156

157+
public ControllerConfigurationOverrider<R> withItemStore(ItemStore<R> itemStore) {
158+
this.itemStore = itemStore;
159+
return this;
160+
}
161+
155162
public ControllerConfigurationOverrider<R> replacingNamedDependentResourceConfig(String name,
156163
Object dependentResourceConfig) {
157164

@@ -175,7 +182,7 @@ public ControllerConfiguration<R> build() {
175182
generationAware, original.getAssociatedReconcilerClassName(), retry, rateLimiter,
176183
reconciliationMaxInterval, onAddFilter, onUpdateFilter, genericFilter,
177184
original.getDependentResources(),
178-
namespaces, finalizer, labelSelector, configurations);
185+
namespaces, finalizer, labelSelector, configurations, itemStore);
179186
overridden.setEventFilter(customResourcePredicate);
180187
return overridden;
181188
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/DefaultResourceConfiguration.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.util.Set;
55

66
import io.fabric8.kubernetes.api.model.HasMetadata;
7+
import io.fabric8.kubernetes.client.informers.cache.ItemStore;
78
import io.javaoperatorsdk.operator.ReconcilerUtils;
89
import io.javaoperatorsdk.operator.processing.event.source.filter.GenericFilter;
910
import io.javaoperatorsdk.operator.processing.event.source.filter.OnAddFilter;
@@ -19,10 +20,11 @@ public class DefaultResourceConfiguration<R extends HasMetadata>
1920
private final GenericFilter<R> genericFilter;
2021
private final String labelSelector;
2122
private final Set<String> namespaces;
23+
private final ItemStore<R> itemStore;
2224

2325
protected DefaultResourceConfiguration(Class<R> resourceClass,
2426
Set<String> namespaces, String labelSelector, OnAddFilter<R> onAddFilter,
25-
OnUpdateFilter<R> onUpdateFilter, GenericFilter<R> genericFilter) {
27+
OnUpdateFilter<R> onUpdateFilter, GenericFilter<R> genericFilter, ItemStore<R> itemStore) {
2628
this.resourceClass = resourceClass;
2729
this.resourceTypeName = ReconcilerUtils.getResourceTypeName(resourceClass);
2830
this.onAddFilter = onAddFilter;
@@ -31,6 +33,7 @@ protected DefaultResourceConfiguration(Class<R> resourceClass,
3133

3234
this.namespaces = ResourceConfiguration.ensureValidNamespaces(namespaces);
3335
this.labelSelector = ResourceConfiguration.ensureValidLabelSelector(labelSelector);
36+
this.itemStore = itemStore;
3437
}
3538

3639
@Override
@@ -66,4 +69,9 @@ public Optional<OnUpdateFilter<R>> onUpdateFilter() {
6669
public Optional<GenericFilter<R>> genericFilter() {
6770
return Optional.ofNullable(genericFilter);
6871
}
72+
73+
@Override
74+
public Optional<ItemStore<R>> getItemStore() {
75+
return Optional.ofNullable(itemStore);
76+
}
6977
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ResolvedControllerConfiguration.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.util.concurrent.TimeUnit;
66

77
import io.fabric8.kubernetes.api.model.HasMetadata;
8+
import io.fabric8.kubernetes.client.informers.cache.ItemStore;
89
import io.javaoperatorsdk.operator.api.config.dependent.DependentResourceConfigurationProvider;
910
import io.javaoperatorsdk.operator.api.config.dependent.DependentResourceSpec;
1011
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
@@ -29,6 +30,7 @@ public class ResolvedControllerConfiguration<P extends HasMetadata>
2930
private final Duration maxReconciliationInterval;
3031
private final String finalizer;
3132
private final Map<DependentResourceSpec, Object> configurations;
33+
private final ItemStore<P> itemStore;
3234

3335
private ResourceEventFilter<P> eventFilter;
3436
private List<DependentResourceSpec> dependentResources;
@@ -40,7 +42,8 @@ public ResolvedControllerConfiguration(Class<P> resourceClass, ControllerConfigu
4042
other.onAddFilter().orElse(null), other.onUpdateFilter().orElse(null),
4143
other.genericFilter().orElse(null),
4244
other.getDependentResources(), other.getNamespaces(),
43-
other.getFinalizerName(), other.getLabelSelector(), Collections.emptyMap());
45+
other.getFinalizerName(), other.getLabelSelector(), Collections.emptyMap(),
46+
other.getItemStore().orElse(null));
4447
}
4548

4649
public static Duration getMaxReconciliationInterval(long interval, TimeUnit timeUnit) {
@@ -67,10 +70,10 @@ public ResolvedControllerConfiguration(Class<P> resourceClass, String name,
6770
GenericFilter<P> genericFilter,
6871
List<DependentResourceSpec> dependentResources,
6972
Set<String> namespaces, String finalizer, String labelSelector,
70-
Map<DependentResourceSpec, Object> configurations) {
73+
Map<DependentResourceSpec, Object> configurations, ItemStore<P> itemStore) {
7174
this(resourceClass, name, generationAware, associatedReconcilerClassName, retry, rateLimiter,
7275
maxReconciliationInterval, onAddFilter, onUpdateFilter, genericFilter,
73-
namespaces, finalizer, labelSelector, configurations);
76+
namespaces, finalizer, labelSelector, configurations, itemStore);
7477
setDependentResources(dependentResources);
7578
}
7679

@@ -79,16 +82,17 @@ protected ResolvedControllerConfiguration(Class<P> resourceClass, String name,
7982
RateLimiter rateLimiter, Duration maxReconciliationInterval,
8083
OnAddFilter<P> onAddFilter, OnUpdateFilter<P> onUpdateFilter, GenericFilter<P> genericFilter,
8184
Set<String> namespaces, String finalizer, String labelSelector,
82-
Map<DependentResourceSpec, Object> configurations) {
83-
super(resourceClass, namespaces, labelSelector, onAddFilter, onUpdateFilter, genericFilter);
85+
Map<DependentResourceSpec, Object> configurations, ItemStore<P> itemStore) {
86+
super(resourceClass, namespaces, labelSelector, onAddFilter, onUpdateFilter, genericFilter,
87+
itemStore);
8488
this.name = ControllerConfiguration.ensureValidName(name, associatedReconcilerClassName);
8589
this.generationAware = generationAware;
8690
this.associatedReconcilerClassName = associatedReconcilerClassName;
8791
this.retry = ensureRetry(retry);
8892
this.rateLimiter = ensureRateLimiter(rateLimiter);
8993
this.maxReconciliationInterval = maxReconciliationInterval;
9094
this.configurations = configurations != null ? configurations : Collections.emptyMap();
91-
95+
this.itemStore = itemStore;
9296
this.finalizer =
9397
ControllerConfiguration.ensureValidFinalizerName(finalizer, getResourceTypeName());
9498
}
@@ -162,4 +166,9 @@ protected void setEventFilter(ResourceEventFilter<P> eventFilter) {
162166
public Object getConfigurationFor(DependentResourceSpec spec) {
163167
return configurations.get(spec);
164168
}
169+
170+
@Override
171+
public Optional<ItemStore<P>> getItemStore() {
172+
return Optional.ofNullable(itemStore);
173+
}
165174
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ResourceConfiguration.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.util.Set;
77

88
import io.fabric8.kubernetes.api.model.HasMetadata;
9+
import io.fabric8.kubernetes.client.informers.cache.ItemStore;
910
import io.javaoperatorsdk.operator.OperatorException;
1011
import io.javaoperatorsdk.operator.ReconcilerUtils;
1112
import io.javaoperatorsdk.operator.api.reconciler.Constants;
@@ -122,4 +123,8 @@ default Set<String> getEffectiveNamespaces() {
122123
}
123124
return targetNamespaces;
124125
}
126+
127+
default Optional<ItemStore<R>> getItemStore() {
128+
return Optional.empty();
129+
}
125130
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Utils.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,10 @@ public static String contextFor(ControllerConfiguration<?> controllerConfigurati
237237
return contextFor(controllerConfiguration.getName(), dependentType, configurationAnnotation);
238238
}
239239

240+
public static String contextFor(String reconcilerName) {
241+
return contextFor(reconcilerName, null, null);
242+
}
243+
240244
@SuppressWarnings("rawtypes")
241245
public static String contextFor(String reconcilerName,
242246
Class<? extends DependentResource> dependentType,

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/informer/InformerConfiguration.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.util.Set;
66

77
import io.fabric8.kubernetes.api.model.HasMetadata;
8+
import io.fabric8.kubernetes.client.informers.cache.ItemStore;
89
import io.javaoperatorsdk.operator.api.config.DefaultResourceConfiguration;
910
import io.javaoperatorsdk.operator.api.config.ResourceConfiguration;
1011
import io.javaoperatorsdk.operator.api.config.Utils;
@@ -38,8 +39,10 @@ protected DefaultInformerConfiguration(String labelSelector,
3839
OnAddFilter<R> onAddFilter,
3940
OnUpdateFilter<R> onUpdateFilter,
4041
OnDeleteFilter<R> onDeleteFilter,
41-
GenericFilter<R> genericFilter) {
42-
super(resourceClass, namespaces, labelSelector, onAddFilter, onUpdateFilter, genericFilter);
42+
GenericFilter<R> genericFilter,
43+
ItemStore<R> itemStore) {
44+
super(resourceClass, namespaces, labelSelector, onAddFilter, onUpdateFilter, genericFilter,
45+
itemStore);
4346
this.followControllerNamespaceChanges = followControllerNamespaceChanges;
4447

4548
this.primaryToSecondaryMapper = primaryToSecondaryMapper;
@@ -103,6 +106,7 @@ class InformerConfigurationBuilder<R extends HasMetadata> {
103106
private OnDeleteFilter<R> onDeleteFilter;
104107
private GenericFilter<R> genericFilter;
105108
private boolean inheritControllerNamespacesOnChange = false;
109+
private ItemStore<R> itemStore;
106110

107111
private InformerConfigurationBuilder(Class<R> resourceClass) {
108112
this.resourceClass = resourceClass;
@@ -203,12 +207,17 @@ public InformerConfigurationBuilder<R> withGenericFilter(GenericFilter<R> generi
203207
return this;
204208
}
205209

210+
public InformerConfigurationBuilder<R> withItemStore(ItemStore<R> itemStore) {
211+
this.itemStore = itemStore;
212+
return this;
213+
}
214+
206215
public InformerConfiguration<R> build() {
207216
return new DefaultInformerConfiguration<>(labelSelector, resourceClass,
208217
primaryToSecondaryMapper,
209218
secondaryToPrimaryMapper,
210219
namespaces, inheritControllerNamespacesOnChange, onAddFilter, onUpdateFilter,
211-
onDeleteFilter, genericFilter);
220+
onDeleteFilter, genericFilter, itemStore);
212221
}
213222
}
214223

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ControllerConfiguration.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.lang.annotation.RetentionPolicy;
77
import java.lang.annotation.Target;
88

9+
import io.fabric8.kubernetes.client.informers.cache.ItemStore;
910
import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent;
1011
import io.javaoperatorsdk.operator.processing.event.rate.LinearRateLimiter;
1112
import io.javaoperatorsdk.operator.processing.event.rate.RateLimiter;
@@ -118,4 +119,6 @@ MaxReconciliationInterval maxReconciliationInterval() default @MaxReconciliation
118119
* accessible no-arg constructor.
119120
*/
120121
Class<? extends RateLimiter> rateLimiter() default LinearRateLimiter.class;
122+
123+
Class<? extends ItemStore> itemStore() default ItemStore.class;
121124
}

0 commit comments

Comments
 (0)