Skip to content

Commit cf11b91

Browse files
committed
improve: discriminator improvements
1 parent 70f0eae commit cf11b91

File tree

4 files changed

+61
-43
lines changed

4 files changed

+61
-43
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package io.javaoperatorsdk.operator.api.reconciler;
2+
3+
import java.util.Optional;
4+
import java.util.function.Function;
5+
6+
import io.fabric8.kubernetes.api.model.HasMetadata;
7+
import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
8+
9+
public class IndexDiscriminator<R extends HasMetadata, P extends HasMetadata>
10+
implements ResourceDiscriminator<R, P> {
11+
12+
private final String indexName;
13+
private final String eventSourceName;
14+
private final Function<P, String> keyMapper;
15+
16+
public IndexDiscriminator(String indexName, Function<P, String> keyMapper) {
17+
this(indexName, null, keyMapper);
18+
}
19+
20+
public IndexDiscriminator(String indexName, String eventSourceName,
21+
Function<P, String> keyMapper) {
22+
this.indexName = indexName;
23+
this.eventSourceName = eventSourceName;
24+
this.keyMapper = keyMapper;
25+
}
26+
27+
@Override
28+
public Optional<R> distinguish(Class<R> resource,
29+
P primary,
30+
Context<P> context) {
31+
32+
InformerEventSource<R, P> eventSource =
33+
(InformerEventSource<R, P>) context
34+
.eventSourceRetriever()
35+
.getResourceEventSourceFor(resource, eventSourceName);
36+
var resources = eventSource.byIndex(indexName, keyMapper.apply(primary));
37+
if (resources.isEmpty()) {
38+
return Optional.empty();
39+
} else if (resources.size() > 1) {
40+
throw new IllegalStateException("More than one resource found");
41+
} else {
42+
return Optional.of(resources.get(0));
43+
}
44+
}
45+
}

operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/indexdiscriminator/IndexDiscriminator.java

-41
This file was deleted.

operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/indexdiscriminator/IndexDiscriminatorTestReconciler.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,10 @@ public Map<String, EventSource> prepareEventSources(
8181

8282
firstDependentResourceConfigMap
8383
.setResourceDiscriminator(
84-
new IndexDiscriminator(CONFIG_MAP_INDEX_1, FIRST_CONFIG_MAP_SUFFIX_1));
84+
new TestIndexDiscriminator(CONFIG_MAP_INDEX_1, FIRST_CONFIG_MAP_SUFFIX_1));
8585
secondDependentResourceConfigMap
8686
.setResourceDiscriminator(
87-
new IndexDiscriminator(CONFIG_MAP_INDEX_2, FIRST_CONFIG_MAP_SUFFIX_2));
87+
new TestIndexDiscriminator(CONFIG_MAP_INDEX_2, FIRST_CONFIG_MAP_SUFFIX_2));
8888
return EventSourceInitializer.nameEventSources(eventSource);
8989
}
9090

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package io.javaoperatorsdk.operator.sample.indexdiscriminator;
2+
3+
import io.fabric8.kubernetes.api.model.ConfigMap;
4+
import io.javaoperatorsdk.operator.api.reconciler.IndexDiscriminator;
5+
6+
import static io.javaoperatorsdk.operator.sample.indexdiscriminator.IndexDiscriminatorTestReconciler.configMapKeyFromPrimary;
7+
8+
public class TestIndexDiscriminator
9+
extends IndexDiscriminator<ConfigMap, IndexDiscriminatorTestCustomResource> {
10+
11+
public TestIndexDiscriminator(String indexName, String nameSuffix) {
12+
super(indexName, p -> configMapKeyFromPrimary(p, nameSuffix));
13+
}
14+
}

0 commit comments

Comments
 (0)