8000 feat: support indexers in informer related event sources (#1131) · rsynek/java-operator-sdk@dbf2a0e · GitHub
[go: up one dir, main page]

Skip to content

Commit dbf2a0e

Browse files
csvirimetacosm
andauthored
feat: support indexers in informer related event sources (operator-framework#1131)
* feat: support indexers in informer related event sources * fix: simplification * fix: add primary indexer * fix: naming of IT * fix: added IT * fix: remove smell * fix: code improvements * feat: add convenient addIndexer method * chore: add equivalent managed dependent implementation and test Co-authored-by: Chris Laprun <metacosm@gmail.com>
1 parent f1ad04e commit dbf2a0e

28 files changed

+446
-283
lines changed

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,13 @@ private InformerConfigurationBuilder(Class<R> resourceClass) {
6464
this.resourceClass = resourceClass;
6565
}
6666

67-
public InformerConfigurationBuilder<R, P> withPrimaryResourcesRetriever(
67+
public InformerConfigurationBuilder<R, P> withSecondaryToPrimaryMapper(
6868
SecondaryToPrimaryMapper<R> secondaryToPrimaryMapper) {
6969
this.secondaryToPrimaryResourcesIdSet = secondaryToPrimaryMapper;
7070
return this;
7171
}
7272

73-
public InformerConfigurationBuilder<R, P> withAssociatedSecondaryResourceIdentifier(
73+
public InformerConfigurationBuilder<R, P> withPrimaryToSecondaryMapper(
7474
PrimaryToSecondaryMapper<P> associatedWith) {
7575
this.associatedWith = associatedWith;
7676
return this;
@@ -115,8 +115,8 @@ static <R extends HasMetadata, P extends HasMetadata> InformerConfigurationBuild
115115
return new InformerConfigurationBuilder<R, P>(configuration.getResourceClass())
116116
.withNamespaces(configuration.getNamespaces())
117117
.withLabelSelector(configuration.getLabelSelector())
118-
.withAssociatedSecondaryResourceIdentifier(
118+
.withPrimaryToSecondaryMapper(
119119
configuration.getPrimaryToSecondaryMapper())
120-
.withPrimaryResourcesRetriever(configuration.getSecondaryToPrimaryMapper());
120+
.withSecondaryToPrimaryMapper(configuration.getSecondaryToPrimaryMapper());
12112 628C 1
}
122122
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import io.fabric8.kubernetes.client.KubernetesClient;
55
import io.javaoperatorsdk.operator.api.config.ControllerConfiguration;
66
import io.javaoperatorsdk.operator.processing.event.source.EventSource;
7-
import io.javaoperatorsdk.operator.processing.event.source.ResourceCache;
7+
import io.javaoperatorsdk.operator.processing.event.source.IndexerResourceCache;
88

99
/**
1010
* Contextual information made available to event sources.
@@ -13,11 +13,11 @@
1313
*/
1414
public class EventSourceContext<P extends HasMetadata> {
1515

16-
private final ResourceCache<P> primaryCache;
16+
private final IndexerResourceCache<P> primaryCache;
1717
private final ControllerConfiguration<P> controllerConfiguration;
1818
private final KubernetesClient client;
1919

20-
public EventSourceContext(ResourceCache<P> primaryCache,
20+
public EventSourceContext(IndexerResourceCache<P> primaryCache,
2121
ControllerConfiguration<P> controllerConfiguration,
2222
KubernetesClient client) {
2323
this.primaryCache = primaryCache;
@@ -30,7 +30,7 @@ public EventSourceContext(ResourceCache<P> primaryCache,
3030
*
3131
* @return the primary resource cache
3232
*/
33-
public ResourceCache<P> getPrimaryCache() {
33+
public IndexerResourceCache<P> getPrimaryCache() {
3434
return primaryCache;
3535
}
3636

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ private void configureWith(String labelSelector, Set<String> namespaces) {
6666
InformerConfiguration.from(resourceType())
6767
.withLabelSelector(labelSelector)
6868
.withNamespaces(namespaces)
69-
.withPrimaryResourcesRetriever(primaryResourcesRetriever)
70-
.withAssociatedSecondaryResourceIdentifier(secondaryResourceIdentifier)
69+
.withSecondaryToPrimaryMapper(primaryResourcesRetriever)
70+
.withPrimaryToSecondaryMapper(secondaryResourceIdentifier)
7171
.build();
7272
configureWith(new InformerEventSource<>(ic, client));
7373
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package io.javaoperatorsdk.operator.processing.event.source;
2+
3+
import java.util.List;
4+
import java.util.Map;
5+
import java.util.function.Function;
6+
7+
import io.fabric8.kubernetes.api.model.HasMetadata;
8+
9+
public interface IndexerResourceCache<T extends HasMetadata> extends ResourceCache<T> {
10+
11+
void addIndexers(Map<String, Function<T, List<String>>> indexers);
12+
13+
default void addIndexer(String name, Function<T, List<String>> indexer) {
14+
addIndexers(Map.of(name, indexer));
15+
}
16+
17+
List<T> byIndex(String indexName, String indexKey);
18+
19+
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/ControllerResourceCache.java

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

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import io.javaoperatorsdk.operator.processing.event.Event;
1515
import io.javaoperatorsdk.operator.processing.event.EventHandler;
1616
import io.javaoperatorsdk.operator.processing.event.ResourceID;
17-
import io.javaoperatorsdk.operator.processing.event.source.ResourceCache;
1817

1918
/**
2019
* <p>
@@ -64,7 +63,7 @@
6463
*/
6564
public class InformerEventSource<R extends HasMetadata, P extends HasMetadata>
6665
extends ManagedInformerEventSource<R, P, InformerConfiguration<R, P>>
67-
implements ResourceCache<R>, ResourceEventHandler<R>, RecentOperationEventFilter<R> {
66+
implements ResourceEventHandler<R>, RecentOperationEventFilter<R> {
6867

6968
private static final Logger log = LoggerFactory.getLogger(InformerEventSource.class);
7069

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

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package io.javaoperatorsdk.operator.processing.event.source.informer;
22

3-
import java.util.Map;
4-
import java.util.Optional;
3+
import java.util.*;
54
import java.util.concurrent.ConcurrentHashMap;
5+
import java.util.function.Function;
66
import java.util.function.Predicate;
7+
import java.util.stream.Collectors;
78
import java.util.stream.Stream;
89

910
import org.slf4j.Logger;
@@ -22,11 +23,11 @@
2223
import io.javaoperatorsdk.operator.processing.LifecycleAware;
2324
import io.javaoperatorsdk.operator.processing.event.ResourceID;
2425
import io.javaoperatorsdk.operator.processing.event.source.Cache;
25-
import io.javaoperatorsdk.operator.processing.event.source.ResourceCache;
26+
import io.javaoperatorsdk.operator.processing.event.source.IndexerResourceCache;
2627
import io.javaoperatorsdk.operator.processing.event.source.UpdatableCache;
2728

2829
public class InformerManager<T extends HasMetadata, C extends ResourceConfiguration<T>>
29-
implements LifecycleAware, ResourceCache<T>, UpdatableCache<T> {
30+
implements LifecycleAware, IndexerResourceCache<T>, UpdatableCache<T> {
3031

3132
private static final String ANY_NAMESPACE_MAP_KEY = "anyNamespace";
3233
private static final Logger log = LoggerFactory.getLogger(InformerManager.class);
@@ -89,7 +90,7 @@ public void stop() {
8990
@Override
9091
public Stream<T> list(Predicate<T> predicate) {
9192
if (predicate == null) {
92-
return sources.values().stream().flatMap(ResourceCache::list);
93+
return sources.values().stream().flatMap(IndexerResourceCache::list);
9394
}
9495
return sources.values().stream().flatMap(i -> i.list(predicate));
9596
}
@@ -144,4 +145,14 @@ public void put(ResourceID key, T resource) {
144145
key, resource));
145146
}
146147

148+
@Override
149+
public void addIndexers(Map<String, Function<T, List<String>>> indexers) {
150+
sources.values().forEach(s -> s.addIndexers(indexers));
151+
}
152+
153+
@Override
154+
public List<T> byIndex(String indexName, String indexKey) {
155+
return sources.values().stream().map(s -> s.byIndex(indexName, indexKey))
156+
.flatMap(List::stream).collect(Collectors.toList());
157+
}
147158
}

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

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

0 commit comments

Comments
 (0)
0