17
17
import io .javaoperatorsdk .operator .processing .event .source .filter .OnUpdateFilter ;
18
18
import io .javaoperatorsdk .operator .processing .retry .Retry ;
19
19
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 ;
22
20
23
21
@ SuppressWarnings ({"rawtypes" , "unused" , "UnusedReturnValue" })
24
22
public class ControllerConfigurationOverrider <R extends HasMetadata > {
25
23
24
+ private final ControllerConfiguration <R > original ;
25
+ private String name ;
26
26
private String finalizer ;
27
27
private boolean generationAware ;
28
- private Set <String > namespaces ;
29
28
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 ;
36
29
private RateLimiter rateLimiter ;
37
- private Map <DependentResourceSpec , Object > configurations ;
38
- private ItemStore <R > itemStore ;
39
- private String name ;
40
30
private String fieldManager ;
41
- private Long informerListLimit ;
31
+ private Duration reconciliationMaxInterval ;
32
+ private Map <DependentResourceSpec , Object > configurations ;
33
+ private final InformerConfigHolder <R >.Builder config ;
42
34
43
35
private ControllerConfigurationOverrider (ControllerConfiguration <R > original ) {
44
36
this .finalizer = original .getFinalizerName ();
45
37
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 ));
47
47
this .retry = original .getRetry ();
48
- this .labelSelector = original .getLabelSelector ();
49
48
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 );
53
49
this .original = original ;
54
50
this .rateLimiter = original .getRateLimiter ();
55
51
this .name = original .getName ();
56
52
this .fieldManager = original .fieldManager ();
57
- this .informerListLimit = original .getInformerListLimit ().orElse (null );
58
- this .itemStore = original .getItemStore ().orElse (null );
59
53
}
60
54
61
55
public ControllerConfigurationOverrider <R > withFinalizer (String finalizer ) {
@@ -69,26 +63,36 @@ public ControllerConfigurationOverrider<R> withGenerationAware(boolean generatio
69
63
}
70
64
71
65
public ControllerConfigurationOverrider <R > watchingOnlyCurrentNamespace () {
72
- this . namespaces = WATCH_CURRENT_NAMESPACE_SET ;
66
+ config . withWatchCurrentNamespace () ;
73
67
return this ;
74
68
}
75
69
76
70
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
+ }
78
78
return this ;
79
79
}
80
80
81
81
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
+ }
85
90
}
86
91
return this ;
87
92
}
88
93
89
94
public ControllerConfigurationOverrider <R > settingNamespaces (Set <String > newNamespaces ) {
90
- this .namespaces .clear ();
91
- this .namespaces .addAll (newNamespaces );
95
+ config .withNamespaces (newNamespaces );
92
96
return this ;
93
97
}
94
98
@@ -97,13 +101,12 @@ public ControllerConfigurationOverrider<R> settingNamespaces(String... newNamesp
97
101
}
98
102
99
103
public ControllerConfigurationOverrider <R > settingNamespace (String namespace ) {
100
- this .namespaces .clear ();
101
- this .namespaces .add (namespace );
104
+ config .withNamespaces (Set .of (namespace ));
102
105
return this ;
103
106
}
104
107
105
108
public ControllerConfigurationOverrider <R > watchingAllNamespaces () {
106
- this . namespaces = DEFAULT_NAMESPACES_SET ;
109
+ config . withWatchAllNamespaces () ;
107
110
return this ;
108
111
}
109
112
@@ -118,7 +121,7 @@ public ControllerConfigurationOverrider<R> withRateLimiter(RateLimiter rateLimit
118
121
}
119
122
120
123
public ControllerConfigurationOverrider <R > withLabelSelector (String labelSelector ) {
121
- this . labelSelector = labelSelector ;
124
+ config . withLabelSelector ( labelSelector ) ;
122
125
return this ;
123
126
}
124
127
@@ -129,27 +132,28 @@ public ControllerConfigurationOverrider<R> withReconciliationMaxInterval(
129
132
}
130
133
131
134
public ControllerConfigurationOverrider <R > withOnAddFilter (OnAddFilter <R > onAddFilter ) {
132
- this . onAddFilter = onAddFilter ;
135
+ config . withOnAddFilter ( onAddFilter ) ;
133
136
return this ;
134
137
}
135
138
136
139
public ControllerConfigurationOverrider <R > withOnUpdateFilter (OnUpdateFilter <R > onUpdateFilter ) {
137
- this . onUpdateFilter = onUpdateFilter ;
140
+ config . withOnUpdateFilter ( onUpdateFilter ) ;
138
141
return this ;
139
142
}
140
143
141
144
public ControllerConfigurationOverrider <R > withGenericFilter (GenericFilter <R > genericFilter ) {
142
- this . genericFilter = genericFilter ;
145
+ config . withGenericFilter ( genericFilter ) ;
143
146
return this ;
144
147
}
145
148
146
149
public ControllerConfigurationOverrider <R > withItemStore (ItemStore <R > itemStore ) {
147
- this . itemStore = itemStore ;
150
+ config . withItemStore ( itemStore ) ;
148
151
return this ;
149
152
}
150
153
151
154
public ControllerConfigurationOverrider <R > withName (String name ) {
152
155
this .name = name ;
156
+ config .withName (name );
153
157
return this ;
154
158
}
155
159
@@ -169,7 +173,7 @@ public ControllerConfigurationOverrider<R> withFieldManager(
169
173
*/
170
174
public ControllerConfigurationOverrider <R > withInformerListLimit (
171
175
Long informerListLimit ) {
172
- this . informerListLimit = informerListLimit ;
176
+ config . withInformerListLimit ( informerListLimit ) ;
173
177
return this ;
174
178
}
175
179
@@ -190,26 +194,13 @@ public ControllerConfigurationOverrider<R> replacingNamedDependentResourceConfig
190
194
}
191
195
192
196
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
-
206
197
return new ResolvedControllerConfiguration <>(original .getResourceClass (),
207
198
name ,
208
199
generationAware , original .getAssociatedReconcilerClassName (), retry , rateLimiter ,
209
200
reconciliationMaxInterval ,
210
201
finalizer , configurations , fieldManager ,
211
202
original .getConfigurationService (),
212
- informerConfig ,
203
+ config . buildForController () ,
213
204
original .getWorkflowSpec ().orElse (null ));
214
205
}
215
206
0 commit comments