55import java .util .Set ;
66import java .util .concurrent .ExecutorService ;
77import java .util .function .Consumer ;
8+ import java .util .function .Function ;
89
910import org .slf4j .Logger ;
1011import org .slf4j .LoggerFactory ;
@@ -41,6 +42,7 @@ public class ConfigurationServiceOverrider {
4142 private Boolean previousAnnotationForDependentResources ;
4243 private Boolean parseResourceVersions ;
4344 private Boolean useSSAToPatchPrimaryResource ;
45+ private Boolean cloneSecondaryResourcesWhenGettingFromCache ;
4446 @ SuppressWarnings ("rawtypes" )
4547 private DependentResourceFactory dependentResourceFactory ;
4648
@@ -203,30 +205,43 @@ public ConfigurationServiceOverrider withUseSSAToPatchPrimaryResource(boolean va
203205 return this ;
204206 }
205207
208+ public ConfigurationServiceOverrider withCloneSecondaryResourcesWhenGettingFromCache (
209+ boolean value ) {
210+ this .cloneSecondaryResourcesWhenGettingFromCache = value ;
211+ return this ;
212+ }
213+
206214 public ConfigurationService build () {
207215 return new BaseConfigurationService (original .getVersion (), cloner , client ) {
208216 @ Override
209217 public Set <String > getKnownReconcilerNames () {
210218 return original .getKnownReconcilerNames ();
211219 }
212220
221+ private <T > T overriddenValueOrDefault (T value ,
222+ Function <ConfigurationService , T > defaultValue ) {
223+ return value != null ? value : defaultValue .apply (original );
224+ }
225+
213226 @ Override
214227 public boolean checkCRDAndValidateLocalModel () {
215- return checkCR != null ? checkCR : original .checkCRDAndValidateLocalModel ();
228+ return overriddenValueOrDefault (checkCR ,
229+ ConfigurationService ::checkCRDAndValidateLocalModel );
216230 }
217231
218232 @ SuppressWarnings ("rawtypes" )
219233 @ Override
234+ @ SuppressWarnings ("rawtypes" )
220235 public DependentResourceFactory dependentResourceFactory () {
221- return dependentResourceFactory != null ? dependentResourceFactory
222- : DependentResourceFactory . DEFAULT ;
236+ return overriddenValueOrDefault ( dependentResourceFactory ,
237+ ConfigurationService :: dependentResourceFactory ) ;
223238 }
224239
225240 @ Override
226241 public int concurrentReconciliationThreads () {
227242 return Utils .ensureValid (
228- concurrentReconciliationThreads != null ? concurrentReconciliationThreads
229- : original . concurrentReconciliationThreads ( ),
243+ overriddenValueOrDefault ( concurrentReconciliationThreads ,
244+ ConfigurationService :: concurrentReconciliationThreads ),
230245 "maximum reconciliation threads" ,
231246 minimumMaxValueFor (minConcurrentReconciliationThreads ),
232247 original .concurrentReconciliationThreads ());
@@ -235,8 +250,8 @@ public int concurrentReconciliationThreads() {
235250 @ Override
236251 public int concurrentWorkflowExecutorThreads () {
237252 return Utils .ensureValid (
238- concurrentWorkflowExecutorThreads != null ? concurrentWorkflowExecutorThreads
239- : original . concurrentWorkflowExecutorThreads ( ),
253+ overriddenValueOrDefault ( concurrentWorkflowExecutorThreads ,
254+ ConfigurationService :: concurrentWorkflowExecutorThreads ),
240255 "maximum workflow execution threads" ,
241256 minimumMaxValueFor (minConcurrentWorkflowExecutorThreads ),
242257 original .concurrentWorkflowExecutorThreads ());
@@ -248,8 +263,8 @@ public int concurrentWorkflowExecutorThreads() {
248263 @ Deprecated (forRemoval = true )
249264 @ Override
250265 public int minConcurrentReconciliationThreads () {
251- return minConcurrentReconciliationThreads != null ? minConcurrentReconciliationThreads
252- : original . minConcurrentReconciliationThreads ( );
266+ return overriddenValueOrDefault ( minConcurrentReconciliationThreads ,
267+ ConfigurationService :: minConcurrentReconciliationThreads );
253268 }
254269
255270 /**
@@ -258,30 +273,29 @@ public int minConcurrentReconciliationThreads() {
258273 @ Override
259274 @ Deprecated (forRemoval = true )
260275 public int minConcurrentWorkflowExecutorThreads () {
261- return minConcurrentWorkflowExecutorThreads != null ? minConcurrentWorkflowExecutorThreads
262- : original . minConcurrentWorkflowExecutorThreads ( );
276+ return overriddenValueOrDefault ( minConcurrentWorkflowExecutorThreads ,
277+ ConfigurationService :: minConcurrentWorkflowExecutorThreads );
263278 }
264279
265280 @ Override
266281 public Metrics getMetrics () {
267- return metrics != null ? metrics : original . getMetrics ( );
282+ return overriddenValueOrDefault ( metrics , ConfigurationService :: getMetrics );
268283 }
269284
270285 @ Override
271286 public boolean closeClientOnStop () {
272- return closeClientOnStop != null ? closeClientOnStop : original . closeClientOnStop ( );
287+ return overriddenValueOrDefault ( closeClientOnStop , ConfigurationService :: closeClientOnStop );
273288 }
274289
275290 @ Override
276291 public ExecutorService getExecutorService () {
277- return executorService != null ? executorService
278- : super .getExecutorService ();
292+ return overriddenValueOrDefault (executorService , ConfigurationService ::getExecutorService );
279293 }
280294
281295 @ Override
282296 public ExecutorService getWorkflowExecutorService () {
283- return workflowExecutorService != null ? workflowExecutorService
284- : super . getWorkflowExecutorService ( );
297+ return overriddenValueOrDefault ( workflowExecutorService ,
298+ ConfigurationService :: getWorkflowExecutorService );
285299 }
286300
287301 @ Override
@@ -298,54 +312,55 @@ public Optional<InformerStoppedHandler> getInformerStoppedHandler() {
298312
299313 @ Override
300314 public boolean stopOnInformerErrorDuringStartup () {
301- return stopOnInformerErrorDuringStartup != null ? stopOnInformerErrorDuringStartup
302- : super . stopOnInformerErrorDuringStartup ( );
315+ return overriddenValueOrDefault ( stopOnInformerErrorDuringStartup ,
316+ ConfigurationService :: stopOnInformerErrorDuringStartup );
303317 }
304318
305319 @ Override
306320 public Duration cacheSyncTimeout () {
307- return cacheSyncTimeout != null ? cacheSyncTimeout : super . cacheSyncTimeout ( );
321+ return overriddenValueOrDefault ( cacheSyncTimeout , ConfigurationService :: cacheSyncTimeout );
308322 }
309323
310324 @ Override
311325 public ResourceClassResolver getResourceClassResolver () {
312- return resourceClassResolver != null ? resourceClassResolver
313- : super . getResourceClassResolver ( );
326+ return overriddenValueOrDefault ( resourceClassResolver ,
327+ ConfigurationService :: getResourceClassResolver );
314328 }
315329
316330 @ Override
317331 public boolean ssaBasedCreateUpdateMatchForDependentResources () {
318- return ssaBasedCreateUpdateMatchForDependentResources != null
319- ? ssaBasedCreateUpdateMatchForDependentResources
320- : super .ssaBasedCreateUpdateMatchForDependentResources ();
332+ return overriddenValueOrDefault (ssaBasedCreateUpdateMatchForDependentResources ,
333+ ConfigurationService ::ssaBasedCreateUpdateMatchForDependentResources );
321334 }
322335
323336 @ Override
324337 public Set <Class <? extends HasMetadata >> defaultNonSSAResources () {
325- return defaultNonSSAResource != null ? defaultNonSSAResource
326- : super . defaultNonSSAResources ( );
338+ return overriddenValueOrDefault ( defaultNonSSAResource ,
339+ ConfigurationService :: defaultNonSSAResources );
327340 }
328341
329342 @ Override
330343 public boolean previousAnnotationForDependentResourcesEventFiltering () {
331- return previousAnnotationForDependentResources != null
332- ? previousAnnotationForDependentResources
333- : super .previousAnnotationForDependentResourcesEventFiltering ();
344+ return overriddenValueOrDefault (previousAnnotationForDependentResources ,
345+ ConfigurationService ::previousAnnotationForDependentResourcesEventFiltering );
334346 }
335347
336348 @ Override
337349 public boolean parseResourceVersionsForEventFilteringAndCaching () {
338- return parseResourceVersions != null
339- ? parseResourceVersions
340- : super .parseResourceVersionsForEventFilteringAndCaching ();
350+ return overriddenValueOrDefault (parseResourceVersions ,
351+ ConfigurationService ::parseResourceVersionsForEventFilteringAndCaching );
341352 }
342353
343354 @ Override
344355 public boolean useSSAToPatchPrimaryResource () {
345- return useSSAToPatchPrimaryResource != null
346- ? useSSAToPatchPrimaryResource
347- : super . useSSAToPatchPrimaryResource ();
356+ return overriddenValueOrDefault ( useSSAToPatchPrimaryResource ,
357+ ConfigurationService :: useSSAToPatchPrimaryResource );
358+ }
348359
360+ @ Override
361+ public boolean cloneSecondaryResourcesWhenGettingFromCache () {
362+ return overriddenValueOrDefault (cloneSecondaryResourcesWhenGettingFromCache ,
363+ ConfigurationService ::cloneSecondaryResourcesWhenGettingFromCache );
349364 }
350365 };
351366 }
0 commit comments