Skip to content

Commit 9f66b1c

Browse files
committed
wip
1 parent 20a444b commit 9f66b1c

File tree

16 files changed

+120
-60
lines changed

16 files changed

+120
-60
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
import java.util.Optional;
99
import java.util.Set;
1010
import java.util.function.Function;
11+
import java.util.function.UnaryOperator;
1112
import java.util.stream.Collectors;
1213

1314
import io.fabric8.kubernetes.api.model.HasMetadata;
14-
import io.fabric8.kubernetes.client.informers.cache.ItemStore;
1515
import io.javaoperatorsdk.operator.OperatorException;
1616
import io.javaoperatorsdk.operator.ReconcilerUtils;
1717
import io.javaoperatorsdk.operator.api.config.dependent.DependentResourceSpec;
@@ -86,9 +86,9 @@ public Set<String> getNamespaces() {
8686

8787
@Override
8888
@SuppressWarnings("unchecked")
89-
public Optional<ItemStore<P>> itemStore() {
89+
public Optional<UnaryOperator<P>> cachePruneFunction() {
9090
return Optional.ofNullable(
91-
Utils.instantiate(annotation.itemStore(), ItemStore.class,
91+
Utils.instantiate(annotation.cachePruneFunction(), UnaryOperator.class,
9292
Utils.contextFor(this, null, null)));
9393
}
9494

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66
import java.util.List;
77
import java.util.Optional;
88
import java.util.Set;
9+
import java.util.function.UnaryOperator;
910
import java.util.stream.Collectors;
1011

1112
import io.fabric8.kubernetes.api.model.HasMetadata;
12-
import io.fabric8.kubernetes.client.informers.cache.ItemStore;
1313
import io.javaoperatorsdk.operator.api.config.dependent.DependentResourceSpec;
1414
import io.javaoperatorsdk.operator.api.reconciler.dependent.managed.DependentResourceConfigurator;
1515
import io.javaoperatorsdk.operator.processing.event.rate.RateLimiter;
@@ -39,7 +39,7 @@ public class ControllerConfigurationOverrider<R extends HasMetadata> {
3939
private OnUpdateFilter<R> onUpdateFilter;
4040
private GenericFilter<R> genericFilter;
4141
private RateLimiter rateLimiter;
42-
private ItemStore<R> itemStore;
42+
private UnaryOperator<R> cachePruneFunction;
4343

4444
private ControllerConfigurationOverrider(ControllerConfiguration<R> original) {
4545
finalizer = original.getFinalizerName();
@@ -58,7 +58,7 @@ private ControllerConfigurationOverrider(ControllerConfiguration<R> original) {
5858
dependentResources.forEach(drs -> namedDependentResourceSpecs.put(drs.getName(), drs));
5959
this.original = original;
6060
this.rateLimiter = original.getRateLimiter();
61-
this.itemStore = original.itemStore().orElse(null);
61+
this.cachePruneFunction = original.cachePruneFunction().orElse(null);
6262
}
6363

6464
public ControllerConfigurationOverrider<R> withFinalizer(String finalizer) {
@@ -161,8 +161,8 @@ public ControllerConfigurationOverrider<R> withGenericFilter(GenericFilter<R> ge
161161
return this;
162162
}
163163

164-
public ControllerConfigurationOverrider<R> withItemStore(ItemStore<R> itemStore) {
165-
this.itemStore = itemStore;
164+
public ControllerConfigurationOverrider<R> withItemStore(UnaryOperator<R> cachePruneFunction) {
165+
this.cachePruneFunction = cachePruneFunction;
166166
return this;
167167
}
168168

@@ -216,7 +216,7 @@ public ControllerConfiguration<R> build() {
216216
onUpdateFilter,
217217
genericFilter,
218218
rateLimiter,
219-
newDependentSpecs, itemStore);
219+
newDependentSpecs, cachePruneFunction);
220220
}
221221

222222
public static <R extends HasMetadata> ControllerConfigurationOverrider<R> override(

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
import java.util.List;
66
import java.util.Optional;
77
import java.util.Set;
8+
import java.util.function.UnaryOperator;
89

910
import io.fabric8.kubernetes.api.model.HasMetadata;
10-
import io.fabric8.kubernetes.client.informers.cache.ItemStore;
1111
import io.javaoperatorsdk.operator.api.config.dependent.DependentResourceSpec;
1212
import io.javaoperatorsdk.operator.processing.event.rate.LinearRateLimiter;
1313
import io.javaoperatorsdk.operator.processing.event.rate.RateLimiter;
@@ -51,9 +51,9 @@ public DefaultControllerConfiguration(
5151
GenericFilter<R> genericFilter,
5252
RateLimiter rateLimiter,
5353
List<DependentResourceSpec> dependents,
54-
ItemStore<R> itemStore) {
54+
UnaryOperator<R> cachePruneFunction) {
5555
super(labelSelector, resourceClass, onAddFilter, onUpdateFilter, genericFilter, namespaces,
56-
itemStore);
56+
cachePruneFunction);
5757
this.associatedControllerClassName = associatedControllerClassName;
5858
this.name = name;
5959
this.crdName = crdName;

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
import java.util.Optional;
44
import java.util.Set;
5+
import java.util.function.UnaryOperator;
56

67
import io.fabric8.kubernetes.api.model.HasMetadata;
7-
import io.fabric8.kubernetes.client.informers.cache.ItemStore;
88
import io.javaoperatorsdk.operator.processing.event.source.filter.GenericFilter;
99
import io.javaoperatorsdk.operator.processing.event.source.filter.OnAddFilter;
1010
import io.javaoperatorsdk.operator.processing.event.source.filter.OnUpdateFilter;
@@ -20,7 +20,7 @@ public class DefaultResourceConfiguration<R extends HasMetadata>
2020
private final OnAddFilter<R> onAddFilter;
2121
private final OnUpdateFilter<R> onUpdateFilter;
2222
private final GenericFilter<R> genericFilter;
23-
private final ItemStore<R> itemStore;
23+
private final UnaryOperator<R> cachePruneFunction;
2424

2525
public DefaultResourceConfiguration(String labelSelector, Class<R> resourceClass,
2626
OnAddFilter<R> onAddFilter,
@@ -36,7 +36,7 @@ public DefaultResourceConfiguration(String labelSelector, Class<R> resourceClass
3636
OnUpdateFilter<R> onUpdateFilter,
3737
GenericFilter<R> genericFilter,
3838
Set<String> namespaces,
39-
ItemStore<R> itemStore) {
39+
UnaryOperator<R> cachePruneFunction) {
4040
this.labelSelector = labelSelector;
4141
this.resourceClass = resourceClass;
4242
this.onAddFilter = onAddFilter;
@@ -45,7 +45,7 @@ public DefaultResourceConfiguration(String labelSelector, Class<R> resourceClass
4545
this.namespaces =
4646
namespaces == null || namespaces.isEmpty() ? DEFAULT_NAMESPACES_SET
4747
: namespaces;
48-
this.itemStore = itemStore;
48+
this.cachePruneFunction = cachePruneFunction;
4949
}
5050

5151
@Override
@@ -64,8 +64,8 @@ public Set<String> getNamespaces() {
6464
}
6565

6666
@Override
67-
public Optional<ItemStore<R>> itemStore() {
68-
return Optional.ofNullable(this.itemStore);
67+
public Optional<UnaryOperator<R>> cachePruneFunction() {
68+
return Optional.ofNullable(this.cachePruneFunction);
6969
}
7070

7171
@Override

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
import java.util.Collections;
44
import java.util.Optional;
55
import java.util.Set;
6+
import java.util.function.UnaryOperator;
67

78
import io.fabric8.kubernetes.api.model.HasMetadata;
8-
import io.fabric8.kubernetes.client.informers.cache.ItemStore;
99
import io.javaoperatorsdk.operator.OperatorException;
1010
import io.javaoperatorsdk.operator.ReconcilerUtils;
1111
import io.javaoperatorsdk.operator.api.reconciler.Constants;
@@ -110,7 +110,7 @@ default Set<String> getEffectiveNamespaces() {
110110
return targetNamespaces;
111111
}
112112

113-
default Optional<ItemStore<R>> itemStore() {
113+
default Optional<UnaryOperator<R>> cachePruneFunction() {
114114
return Optional.empty();
115115
}
116116
}

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

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
import java.util.Objects;
44
import java.util.Optional;
55
import java.util.Set;
6+
import java.util.function.UnaryOperator;
67

78
import io.fabric8.kubernetes.api.model.HasMetadata;
8-
import io.fabric8.kubernetes.client.informers.cache.ItemStore;
99
import io.javaoperatorsdk.operator.api.config.DefaultResourceConfiguration;
1010
import io.javaoperatorsdk.operator.api.config.ResourceConfiguration;
1111
import io.javaoperatorsdk.operator.api.config.Utils;
@@ -30,7 +30,7 @@ class DefaultInformerConfiguration<R extends HasMetadata> extends
3030
private final SecondaryToPrimaryMapper<R> secondaryToPrimaryMapper;
3131
private final boolean followControllerNamespaceChanges;
3232
private final OnDeleteFilter<R> onDeleteFilter;
33-
private final ItemStore<R> itemStore;
33+
private final UnaryOperator<R> cachePruneFunction;
3434

3535
protected DefaultInformerConfiguration(String labelSelector,
3636
Class<R> resourceClass,
@@ -41,17 +41,17 @@ protected DefaultInformerConfiguration(String labelSelector,
4141
OnUpdateFilter<R> onUpdateFilter,
4242
OnDeleteFilter<R> onDeleteFilter,
4343
GenericFilter<R> genericFilter,
44-
ItemStore<R> itemStore) {
44+
UnaryOperator<R> cachePruneFunction) {
4545
super(labelSelector, resourceClass, onAddFilter, onUpdateFilter, genericFilter, namespaces,
46-
itemStore);
46+
cachePruneFunction);
4747
this.followControllerNamespaceChanges = followControllerNamespaceChanges;
4848

4949
this.primaryToSecondaryMapper = primaryToSecondaryMapper;
5050
this.secondaryToPrimaryMapper =
5151
Objects.requireNonNullElse(secondaryToPrimaryMapper,
5252
Mappers.fromOwnerReference());
5353
this.onDeleteFilter = onDeleteFilter;
54-
this.itemStore = itemStore;
54+
this.cachePruneFunction = cachePruneFunction;
5555
}
5656

5757
@Override
@@ -74,8 +74,8 @@ public <P extends HasMetadata> PrimaryToSecondaryMapper<P> getPrimaryToSecondary
7474
}
7575

7676
@Override
77-
public Optional<ItemStore<R>> itemStore() {
78-
return Optional.ofNullable(this.itemStore);
77+
public Optional<UnaryOperator<R>> cachePruneFunction() {
78+
return Optional.ofNullable(this.cachePruneFunction);
7979
}
8080
}
8181

@@ -112,7 +112,7 @@ class InformerConfigurationBuilder<R extends HasMetadata> {
112112
private OnDeleteFilter<R> onDeleteFilter;
113113
private GenericFilter<R> genericFilter;
114114
private boolean inheritControllerNamespacesOnChange = false;
115-
private ItemStore<R> itemStore;
115+
private UnaryOperator<R> cachePruneFunction;
116116

117117
private InformerConfigurationBuilder(Class<R> resourceClass) {
118118
this.resourceClass = resourceClass;
@@ -213,8 +213,8 @@ public InformerConfigurationBuilder<R> withGenericFilter(GenericFilter<R> generi
213213
return this;
214214
}
215215

216-
public InformerConfigurationBuilder<R> withItemStore(ItemStore<R> itemStore) {
217-
this.itemStore = itemStore;
216+
public InformerConfigurationBuilder<R> withCachePruneFunction(UnaryOperator<R> itemStore) {
217+
this.cachePruneFunction = itemStore;
218218
return this;
219219
}
220220

@@ -223,7 +223,7 @@ public InformerConfiguration<R> build() {
223223
primaryToSecondaryMapper,
224224
secondaryToPrimaryMapper,
225225
namespaces, inheritControllerNamespacesOnChange, onAddFilter, onUpdateFilter,
226-
onDeleteFilter, genericFilter, itemStore);
226+
onDeleteFilter, genericFilter, cachePruneFunction);
227227
}
228228
}
229229

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
import java.lang.annotation.Retention;
66
import java.lang.annotation.RetentionPolicy;
77
import java.lang.annotation.Target;
8+
import java.util.function.UnaryOperator;
89

9-
import io.fabric8.kubernetes.client.informers.cache.ItemStore;
1010
import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent;
1111
import io.javaoperatorsdk.operator.processing.event.rate.LinearRateLimiter;
1212
import io.javaoperatorsdk.operator.processing.event.rate.RateLimiter;
@@ -120,5 +120,5 @@ MaxReconciliationInterval maxReconciliationInterval() default @MaxReconciliation
120120
*/
121121
Class<? extends RateLimiter> rateLimiter() default LinearRateLimiter.class;
122122

123-
Class<? extends ItemStore> itemStore() default ItemStore.class;
123+
Class<? extends UnaryOperator> cachePruneFunction() default UnaryOperator.class;
124124
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerManager.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,13 +99,12 @@ public void changeNamespaces(Set<String> namespaces) {
9999
});
100100
}
101101

102-
103-
104102
private InformerWrapper<T> createEventSource(
105103
FilterWatchListDeletable<T, KubernetesResourceList<T>, Resource<T>> filteredBySelectorClient,
106104
ResourceEventHandler<T> eventHandler, String namespaceIdentifier) {
107105
var informer = filteredBySelectorClient.runnableInformer(0);
108-
configuration.itemStore().ifPresent(informer::itemStore);
106+
configuration.cachePruneFunction()
107+
.ifPresent(f -> informer.itemStore(new TransformingItemStore<>(f)));
109108
var source =
110109
new InformerWrapper<>(informer, namespaceIdentifier);
111110
source.addEventHandler(eventHandler);

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/ManagedInformerEventSource.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,15 @@ public abstract class ManagedInformerEventSource<R extends HasMetadata, P extend
3636

3737
private static final Logger log = LoggerFactory.getLogger(ManagedInformerEventSource.class);
3838

39-
protected TemporaryResourceCache<R> temporaryResourceCache = new TemporaryResourceCache<>(this);
39+
protected TemporaryResourceCache<R> temporaryResourceCache;
4040
protected InformerManager<R, C> cache = new InformerManager<>();
4141
protected C configuration;
4242

4343
protected ManagedInformerEventSource(
4444
MixedOperation<R, KubernetesResourceList<R>, Resource<R>> client, C configuration) {
4545
super(configuration.getResourceClass());
46+
temporaryResourceCache = new TemporaryResourceCache<>(this,
47+
configuration.cachePruneFunction().orElse(null));
4648
manager().initSources(client, configuration, this);
4749
this.configuration = configuration;
4850
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/TemporaryResourceCache.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.util.Map;
44
import java.util.Optional;
55
import java.util.concurrent.ConcurrentHashMap;
6+
import java.util.function.UnaryOperator;
67

78
import org.slf4j.Logger;
89
import org.slf4j.LoggerFactory;
@@ -34,11 +35,15 @@ public class TemporaryResourceCache<T extends HasMetadata> {
3435

3536
private static final Logger log = LoggerFactory.getLogger(TemporaryResourceCache.class);
3637

38+
private UnaryOperator<T> cachePruneFunction;
3739
private final Map<ResourceID, T> cache = new ConcurrentHashMap<>();
3840
private final ManagedInformerEventSource<T, ?, ?> managedInformerEventSource;
3941

40-
public TemporaryResourceCache(ManagedInformerEventSource<T, ?, ?> managedInformerEventSource) {
42+
// todo prune
43+
public TemporaryResourceCache(ManagedInformerEventSource<T, ?, ?> managedInformerEventSource,
44+
UnaryOperator<T> cachePruneFunction) {
4145
this.managedInformerEventSource = managedInformerEventSource;
46+
this.cachePruneFunction = cachePruneFunction;
4247
}
4348

4449
public synchronized void removeResourceFromCache(T resource) {
@@ -78,6 +83,8 @@ public synchronized void putUpdatedResource(T newResource, String previousResour
7883
}
7984
}
8085

86+
87+
8188
public synchronized Optional<T> getResourceFromCache(ResourceID resourceID) {
8289
return Optional.ofNullable(cache.get(resourceID));
8390
}
Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,25 @@
22

33
import java.util.concurrent.ConcurrentHashMap;
44
import java.util.function.Function;
5+
import java.util.function.UnaryOperator;
56
import java.util.stream.Stream;
67

78
import io.fabric8.kubernetes.api.model.HasMetadata;
89
import io.fabric8.kubernetes.client.informers.cache.Cache;
910
import io.fabric8.kubernetes.client.informers.cache.ItemStore;
1011

11-
public class ObjectTransformingItemStore<R extends HasMetadata> implements ItemStore<R> {
12+
public class TransformingItemStore<R extends HasMetadata> implements ItemStore<R> {
1213

1314
private Function<R, String> keyFunction;
14-
private Function<R, R> transformationFunction;
15+
private UnaryOperator<R> transformationFunction;
1516
private ConcurrentHashMap<String, R> store = new ConcurrentHashMap<>();
1617

17-
public ObjectTransformingItemStore(Function<R, R> transformationFunction) {
18+
public TransformingItemStore(UnaryOperator<R> transformationFunction) {
1819
this(Cache::metaNamespaceKeyFunc, transformationFunction);
1920
}
2021

21-
public ObjectTransformingItemStore(Function<R, String> keyFunction,
22-
Function<R, R> transformationFunction) {
22+
public TransformingItemStore(Function<R, String> keyFunction,
23+
UnaryOperator<R> transformationFunction) {
2324
this.keyFunction = keyFunction;
2425
this.transformationFunction = transformationFunction;
2526
}

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/informer/TemporaryResourceCacheTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class TemporaryResourceCacheTest {
1818
public static final String RESOURCE_VERSION = "1";
1919
private InformerEventSource<ConfigMap, ?> informerEventSource = mock(InformerEventSource.class);
2020
private TemporaryResourceCache<ConfigMap> temporaryResourceCache =
21-
new TemporaryResourceCache<>(informerEventSource);
21+
new TemporaryResourceCache<>(informerEventSource, null);
2222

2323

2424
@Test

0 commit comments

Comments
 (0)