Skip to content

Commit 728833c

Browse files
authored
feat: add ability to stream secondary resources from Context (#1916)
1 parent 8b3394c commit 728833c

File tree

6 files changed

+32
-17
lines changed

6 files changed

+32
-17
lines changed

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

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

33
import java.util.Optional;
44
import java.util.Set;
5+
import java.util.stream.Stream;
56

67
import io.fabric8.kubernetes.api.model.HasMetadata;
78
import io.fabric8.kubernetes.client.KubernetesClient;
@@ -19,6 +20,10 @@ default <R> Optional<R> getSecondaryResource(Class<R> expectedType) {
1920

2021
<R> Set<R> getSecondaryResources(Class<R> expectedType);
2122

23+
default <R> Stream<R> getSecondaryResourcesAsStream(Class<R> expectedType) {
24+
return getSecondaryResources(expectedType).stream();
25+
}
26+
2227
@Deprecated(forRemoval = true)
2328
<R> Optional<R> getSecondaryResource(Class<R> expectedType, String eventSourceName);
2429

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.util.Optional;
44
import java.util.Set;
55
import java.util.stream.Collectors;
6+
import java.util.stream.Stream;
67

78
import io.fabric8.kubernetes.api.model.HasMetadata;
89
import io.fabric8.kubernetes.client.KubernetesClient;
@@ -35,10 +36,14 @@ public Optional<RetryInfo> getRetryInfo() {
3536

3637
@Override
3738
public <T> Set<T> getSecondaryResources(Class<T> expectedType) {
39+
return getSecondaryResourcesAsStream(expectedType).collect(Collectors.toSet());
40+
}
41+
42+
@Override
43+
public <R> Stream<R> getSecondaryResourcesAsStream(Class<R> expectedType) {
3844
return controller.getEventSourceManager().getResourceEventSourcesFor(expectedType).stream()
3945
.map(es -> es.getSecondaryResources(primaryResource))
40-
.flatMap(Set::stream)
41-
.collect(Collectors.toSet());
46+
.flatMap(Set::stream);
4247
}
4348

4449
@Override

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public ResourceIDMatcherDiscriminator(Function<P, ResourceID> mapper) {
1818
@Override
1919
public Optional<R> distinguish(Class<R> resource, P primary, Context<P> context) {
2020
var resourceID = mapper.apply(primary);
21-
return context.getSecondaryResources(resource).stream()
21+
return context.getSecondaryResourcesAsStream(resource)
2222
.filter(resourceID::isSameResource)
2323
.findFirst();
2424
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSources.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ public <S> ResourceEventSource<S, R> get(Class<S> dependentType, String name) {
165165

166166
@SuppressWarnings("rawtypes")
167167
private String keyAsString(Class dependentType, String name) {
168-
return name != null && name.length() > 0
168+
return name != null && !name.isEmpty()
169169
? "(" + dependentType.getName() + ", " + name + ")"
170170
: dependentType.getName();
171171
}

operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/bulkdependent/ConfigMapDeleterBulkDependentResource.java

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package io.javaoperatorsdk.operator.sample.bulkdependent;
22

3-
import java.util.*;
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
import java.util.function.Function;
6+
import java.util.stream.Collectors;
47

58
import io.fabric8.kubernetes.api.model.ConfigMap;
69
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
@@ -59,15 +62,14 @@ public ConfigMap desired(BulkDependentTestCustomResource primary, String key,
5962
@Override
6063
public Map<String, ConfigMap> getSecondaryResources(BulkDependentTestCustomResource primary,
6164
Context<BulkDependentTestCustomResource> context) {
62-
var configMaps = context.getSecondaryResources(ConfigMap.class);
63-
Map<String, ConfigMap> result = new HashMap<>(configMaps.size());
64-
configMaps.forEach(cm -> {
65-
String name = cm.getMetadata().getName();
66-
if (name.startsWith(primary.getMetadata().getName())) {
67-
String key = name.substring(name.lastIndexOf(INDEX_DELIMITER) + 1);
68-
result.put(key, cm);
69-
}
70-
});
71-
return result;
65+
return context.getSecondaryResourcesAsStream(ConfigMap.class)
66+
.filter(cm -> getName(cm).startsWith(primary.getMetadata().getName()))
67+
.collect(Collectors.toMap(
68+
cm -> getName(cm).substring(getName(cm).lastIndexOf(INDEX_DELIMITER) + 1),
69+
Function.identity()));
70+
}
71+
72+
private static String getName(ConfigMap cm) {
73+
return cm.getMetadata().getName();
7274
}
7375
}

operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/bulkdependent/external/ExternalBulkDependentResource.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package io.javaoperatorsdk.operator.sample.bulkdependent.external;
22

3-
import java.util.*;
3+
import java.util.HashMap;
4+
import java.util.HashSet;
5+
import java.util.Map;
6+
import java.util.Set;
47
import java.util.stream.Collectors;
58

69
import io.javaoperatorsdk.operator.api.reconciler.Context;
@@ -75,7 +78,7 @@ public Map<String, ExternalResource> desiredResources(BulkDependentTestCustomRes
7578
public Map<String, ExternalResource> getSecondaryResources(
7679
BulkDependentTestCustomResource primary,
7780
Context<BulkDependentTestCustomResource> context) {
78-
return context.getSecondaryResources(resourceType()).stream()
81+
return context.getSecondaryResourcesAsStream(resourceType())
7982
.filter(r -> r.getId()
8083
.startsWith(primary.getMetadata().getName() + EXTERNAL_RESOURCE_NAME_DELIMITER +
8184
primary.getMetadata().getNamespace() +

0 commit comments

Comments
 (0)