From 24f2865dc52a1c0b0b79897d4c3b29b6e63b308d Mon Sep 17 00:00:00 2001 From: csviri Date: Thu, 10 Mar 2022 11:28:23 +0100 Subject: [PATCH] fix: dependent resource cache iller and filter issue --- .../dependent/AbstractDependentResource.java | 38 ++++++++++++------- .../StandaloneDependentResourceIT.java | 6 ++- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/AbstractDependentResource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/AbstractDependentResource.java index af727b66eb..49c8ec3b2a 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/AbstractDependentResource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/AbstractDependentResource.java @@ -14,22 +14,12 @@ public abstract class AbstractDependentResource private final boolean creatable = this instanceof Creator; private final boolean updatable = this instanceof Updater; private final boolean deletable = this instanceof Deleter; - private final boolean filteringEventSource; - private final boolean cachingEventSource; protected Creator creator; protected Updater updater; protected Deleter

deleter; @SuppressWarnings("unchecked") public AbstractDependentResource() { - if (this instanceof EventSourceProvider) { - final var eventSource = ((EventSourceProvider

) this).getEventSource(); - filteringEventSource = eventSource instanceof RecentOperationEventFilter; - cachingEventSource = eventSource instanceof RecentOperationCacheFiller; - } else { - filteringEventSource = false; - cachingEventSource = false; - } creator = creatable ? (Creator) this : null; updater = updatable ? (Updater) this : null; deleter = deletable ? (Deleter

) this : null; @@ -81,27 +71,27 @@ protected void handleCreate(R desired, P primary, Context context) { } private void cleanupAfterEventFiltering(R desired, ResourceID resourceID, R created) { - if (filteringEventSource) { + if (isFilteringEventSource()) { eventSourceAsRecentOperationEventFilter() .cleanupOnCreateOrUpdateEventFiltering(resourceID, created); } } private void cacheAfterCreate(ResourceID resourceID, R created) { - if (cachingEventSource) { + if (isRecentOperationCacheFiller()) { eventSourceAsRecentOperationCacheFiller().handleRecentResourceCreate(resourceID, created); } } private void cacheAfterUpdate(R actual, ResourceID resourceID, R updated) { - if (cachingEventSource) { + if (isRecentOperationCacheFiller()) { eventSourceAsRecentOperationCacheFiller().handleRecentResourceUpdate(resourceID, updated, actual); } } private void prepareEventFiltering(R desired, ResourceID resourceID) { - if (filteringEventSource) { + if (isFilteringEventSource()) { eventSourceAsRecentOperationEventFilter().prepareForCreateOrUpdateEventFiltering(resourceID, desired); } @@ -130,6 +120,26 @@ private RecentOperationCacheFiller eventSourceAsRecentOperationCacheFiller() return (RecentOperationCacheFiller) ((EventSourceProvider

) this).getEventSource(); } + // this cannot be done in constructor since event source might be initialized later + protected boolean isFilteringEventSource() { + if (this instanceof EventSourceProvider) { + final var eventSource = ((EventSourceProvider

) this).getEventSource(); + return eventSource instanceof RecentOperationEventFilter; + } else { + return false; + } + } + + // this cannot be done in constructor since event source might be initialized later + protected boolean isRecentOperationCacheFiller() { + if (this instanceof EventSourceProvider) { + final var eventSource = ((EventSourceProvider

) this).getEventSource(); + return eventSource instanceof RecentOperationCacheFiller; + } else { + return false; + } + } + @Override public void cleanup(P primary, Context context) { if (isDeletable(primary, context)) { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/StandaloneDependentResourceIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/StandaloneDependentResourceIT.java index d86385f1f1..b7d88159e5 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/StandaloneDependentResourceIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/StandaloneDependentResourceIT.java @@ -7,6 +7,7 @@ import io.fabric8.kubernetes.api.model.ObjectMeta; import io.fabric8.kubernetes.api.model.apps.Deployment; +import io.javaoperatorsdk.operator.api.config.ConfigurationService; import io.javaoperatorsdk.operator.config.runtime.DefaultConfigurationService; import io.javaoperatorsdk.operator.junit.OperatorExtension; import io.javaoperatorsdk.operator.sample.standalonedependent.StandaloneDependentTestCustomResource; @@ -53,8 +54,9 @@ void executeUpdateForTestingCacheUpdateForGetResource() { awaitForDeploymentReadyReplicas(1); - createdCR.getSpec().setReplicaCount(2); - operator.replace(StandaloneDependentTestCustomResource.class, createdCR); + var clonedCr = ConfigurationService.DEFAULT_CLONER.clone(createdCR); + clonedCr.getSpec().setReplicaCount(2); + operator.replace(StandaloneDependentTestCustomResource.class, clonedCr); awaitForDeploymentReadyReplicas(2); assertThat(