Skip to content

Commit b823a33

Browse files
committed
refactor: use InformerConfigHolder in more places, unifying handling
Signed-off-by: Chris Laprun <[email protected]>
1 parent 4c776aa commit b823a33

File tree

10 files changed

+177
-242
lines changed

10 files changed

+177
-242
lines changed

caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/AbstractTestReconciler.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public List<EventSource<?, P>> prepareEventSources(
7878
ConfigMap.class, Duration.ofMinutes(1), 1); // setting max size for testing purposes
7979

8080
var es = new InformerEventSource<>(InformerConfiguration.from(ConfigMap.class, primaryClass())
81-
.withItemStore(boundedItemStore)
81+
.withInformerConfiguration(c -> c.withItemStore(boundedItemStore))
8282
.withSecondaryToPrimaryMapper(
8383
Mappers.fromOwnerReferences(context.getPrimaryResourceClass(),
8484
this instanceof BoundedCacheClusterScopeTestReconciler))

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

+41-50
Original file line numberDiff line numberDiff line change
@@ -17,45 +17,39 @@
1717
import io.javaoperatorsdk.operator.processing.event.source.filter.OnUpdateFilter;
1818
import io.javaoperatorsdk.operator.processing.retry.Retry;
1919

20-
import static io.javaoperatorsdk.operator.api.reconciler.Constants.DEFAULT_NAMESPACES_SET;
21-
import static io.javaoperatorsdk.operator.api.reconciler.Constants.WATCH_CURRENT_NAMESPACE_SET;
2220

2321
@SuppressWarnings({"rawtypes", "unused", "UnusedReturnValue"})
2422
public class ControllerConfigurationOverrider<R extends HasMetadata> {
2523

24+
private final ControllerConfiguration<R> original;
25+
private String name;
2626
private String finalizer;
2727
private boolean generationAware;
28-
private Set<String> namespaces;
2928
private Retry retry;
30-
private String labelSelector;
31-
private final ControllerConfiguration<R> original;
32-
private Duration reconciliationMaxInterval;
33-
private OnAddFilter<? super R> onAddFilter;
34-
private OnUpdateFilter<? super R> onUpdateFilter;
35-
private GenericFilter<? super R> genericFilter;
3629
private RateLimiter rateLimiter;
37-
private Map<DependentResourceSpec, Object> configurations;
38-
private ItemStore<R> itemStore;
39-
private String name;
4030
private String fieldManager;
41-
private Long informerListLimit;
31+
private Duration reconciliationMaxInterval;
32+
private Map<DependentResourceSpec, Object> configurations;
33+
private final InformerConfigHolder<R>.Builder config;
4234

4335
private ControllerConfigurationOverrider(ControllerConfiguration<R> original) {
4436
this.finalizer = original.getFinalizerName();
4537
this.generationAware = original.isGenerationAware();
46-
this.namespaces = new HashSet<>(original.getNamespaces());
38+
this.config = InformerConfigHolder.builder(original.getResourceClass())
39+
.withName(name)
40+
.withNamespaces(original.getNamespaces())
41+
.withLabelSelector(original.getLabelSelector())
42+
.withOnAddFilter(original.onAddFilter().orElse(null))
43+
.withOnUpdateFilter(original.onUpdateFilter().orElse(null))
44+
.withGenericFilter(original.genericFilter().orElse(null))
45+
.withInformerListLimit(original.getInformerListLimit().orElse(null))
46+
.withItemStore(original.getItemStore().orElse(null));
4747
this.retry = original.getRetry();
48-
this.labelSelector = original.getLabelSelector();
4948
this.reconciliationMaxInterval = original.maxReconciliationInterval().orElse(null);
50-
this.onAddFilter = original.onAddFilter().orElse(null);
51-
this.onUpdateFilter = original.onUpdateFilter().orElse(null);
52-
this.genericFilter = original.genericFilter().orElse(null);
5349
this.original = original;
5450
this.rateLimiter = original.getRateLimiter();
5551
this.name = original.getName();
5652
this.fieldManager = original.fieldManager();
57-
this.informerListLimit = original.getInformerListLimit().orElse(null);
58-
this.itemStore = original.getItemStore().orElse(null);
5953
}
6054

6155
public ControllerConfigurationOverrider<R> withFinalizer(String finalizer) {
@@ -69,26 +63,36 @@ public ControllerConfigurationOverrider<R> withGenerationAware(boolean generatio
6963
}
7064

7165
public ControllerConfigurationOverrider<R> watchingOnlyCurrentNamespace() {
72-
this.namespaces = WATCH_CURRENT_NAMESPACE_SET;
66+
config.withWatchCurrentNamespace();
7367
return this;
7468
}
7569

7670
public ControllerConfigurationOverrider<R> addingNamespaces(String... namespaces) {
77-
this.namespaces.addAll(List.of(namespaces));
71+
if (namespaces != null && namespaces.length > 0) {
72+
final var current = config.namespaces();
73+
final var aggregated = new HashSet<String>(current.size() + namespaces.length);
74+
aggregated.addAll(current);
75+
aggregated.addAll(Set.of(namespaces));
76+
config.withNamespaces(aggregated);
77+
}
7878
return this;
7979
}
8080

8181
public ControllerConfigurationOverrider<R> removingNamespaces(String... namespaces) {
82-
List.of(namespaces).forEach(this.namespaces::remove);
83-
if (this.namespaces.isEmpty()) {
84-
this.namespaces = DEFAULT_NAMESPACES_SET;
82+
if (namespaces != null && namespaces.length > 0) {
83+
final var current = new HashSet<>(config.namespaces());
84+
List.of(namespaces).forEach(current::remove);
85+
if (current.isEmpty()) {
86+
return watchingAllNamespaces();
87+
} else {
88+
config.withNamespaces(current);
89+
}
8590
}
8691
return this;
8792
}
8893

8994
public ControllerConfigurationOverrider<R> settingNamespaces(Set<String> newNamespaces) {
90-
this.namespaces.clear();
91-
this.namespaces.addAll(newNamespaces);
95+
config.withNamespaces(newNamespaces);
9296
return this;
9397
}
9498

@@ -97,13 +101,12 @@ public ControllerConfigurationOverrider<R> settingNamespaces(String... newNamesp
97101
}
98102

99103
public ControllerConfigurationOverrider<R> settingNamespace(String namespace) {
100-
this.namespaces.clear();
101-
this.namespaces.add(namespace);
104+
config.withNamespaces(Set.of(namespace));
102105
return this;
103106
}
104107

105108
public ControllerConfigurationOverrider<R> watchingAllNamespaces() {
106-
this.namespaces = DEFAULT_NAMESPACES_SET;
109+
config.withWatchAllNamespaces();
107110
return this;
108111
}
109112

@@ -118,7 +121,7 @@ public ControllerConfigurationOverrider<R> withRateLimiter(RateLimiter rateLimit
118121
}
119122

120123
public ControllerConfigurationOverrider<R> withLabelSelector(String labelSelector) {
121-
this.labelSelector = labelSelector;
124+
config.withLabelSelector(labelSelector);
122125
return this;
123126
}
124127

@@ -129,27 +132,28 @@ public ControllerConfigurationOverrider<R> withReconciliationMaxInterval(
129132
}
130133

131134
public ControllerConfigurationOverrider<R> withOnAddFilter(OnAddFilter<R> onAddFilter) {
132-
this.onAddFilter = onAddFilter;
135+
config.withOnAddFilter(onAddFilter);
133136
return this;
134137
}
135138

136139
public ControllerConfigurationOverrider<R> withOnUpdateFilter(OnUpdateFilter<R> onUpdateFilter) {
137-
this.onUpdateFilter = onUpdateFilter;
140+
config.withOnUpdateFilter(onUpdateFilter);
138141
return this;
139142
}
140143

141144
public ControllerConfigurationOverrider<R> withGenericFilter(GenericFilter<R> genericFilter) {
142-
this.genericFilter = genericFilter;
145+
config.withGenericFilter(genericFilter);
143146
return this;
144147
}
145148

146149
public ControllerConfigurationOverrider<R> withItemStore(ItemStore<R> itemStore) {
147-
this.itemStore = itemStore;
150+
config.withItemStore(itemStore);
148151
return this;
149152
}
150153

151154
public ControllerConfigurationOverrider<R> withName(String name) {
152155
this.name = name;
156+
config.withName(name);
153157
return this;
154158
}
155159

@@ -169,7 +173,7 @@ public ControllerConfigurationOverrider<R> withFieldManager(
169173
*/
170174
public ControllerConfigurationOverrider<R> withInformerListLimit(
171175
Long informerListLimit) {
172-
this.informerListLimit = informerListLimit;
176+
config.withInformerListLimit(informerListLimit);
173177
return this;
174178
}
175179

@@ -190,26 +194,13 @@ public ControllerConfigurationOverrider<R> replacingNamedDependentResourceConfig
190194
}
191195

192196
public ControllerConfiguration<R> build() {
193-
// todo: should use an informer builder directly and share code across similar builders
194-
InformerConfigHolder<R> informerConfig =
195-
InformerConfigHolder.builder(original.getResourceClass())
196-
.withLabelSelector(labelSelector)
197-
.withItemStore(itemStore)
198-
.withInformerListLimit(informerListLimit)
199-
.withName(name)
200-
.withNamespaces(namespaces)
201-
.withOnAddFilter(onAddFilter)
202-
.withOnUpdateFilter(onUpdateFilter)
203-
.withGenericFilter(genericFilter)
204-
.buildForController();
205-
206197
return new ResolvedControllerConfiguration<>(original.getResourceClass(),
207198
name,
208199
generationAware, original.getAssociatedReconcilerClassName(), retry, rateLimiter,
209200
reconciliationMaxInterval,
210201
finalizer, configurations, fieldManager,
211202
original.getConfigurationService(),
212-
informerConfig,
203+
config.buildForController(),
213204
original.getWorkflowSpec().orElse(null));
214205
}
215206

0 commit comments

Comments
 (0)