diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/DefaultContext.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/DefaultContext.java
index 00a94390c6..0b6d90065b 100644
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/DefaultContext.java
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/DefaultContext.java
@@ -1,7 +1,5 @@
package io.javaoperatorsdk.operator.api.reconciler;
-import java.util.Collections;
-import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
@@ -10,7 +8,6 @@
import io.javaoperatorsdk.operator.api.config.ControllerConfiguration;
import io.javaoperatorsdk.operator.api.reconciler.dependent.managed.ManagedDependentResourceContext;
import io.javaoperatorsdk.operator.processing.Controller;
-import io.javaoperatorsdk.operator.processing.MultiResourceOwner;
public class DefaultContext
implements Context
{
@@ -37,17 +34,8 @@ public Optional getRetryInfo() {
@SuppressWarnings("unchecked")
public Set getSecondaryResources(Class expectedType) {
return controller.getEventSourceManager().getEventSourcesFor(expectedType).stream()
- .map(
- es -> {
- if (es instanceof MultiResourceOwner) {
- return ((MultiResourceOwner) es).getSecondaryResources(primaryResource);
- } else {
- return es.getSecondaryResource(primaryResource)
- .map(List::of)
- .orElse(Collections.emptyList());
- }
- })
- .flatMap(List::stream)
+ .map(es -> es.getSecondaryResources(primaryResource))
+ .flatMap(Set::stream)
.collect(Collectors.toSet());
}
diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/RecentOperationCacheFiller.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/RecentOperationCacheFiller.java
index 7e27537d49..cb84783a4f 100644
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/RecentOperationCacheFiller.java
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/RecentOperationCacheFiller.java
@@ -6,5 +6,5 @@ public interface RecentOperationCacheFiller {
void handleRecentResourceCreate(ResourceID resourceID, R resource);
- void handleRecentResourceUpdate(ResourceID resourceID, R resource, R previousResourceVersion);
+ void handleRecentResourceUpdate(ResourceID resourceID, R resource, R previousVersionOfResource);
}
diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/MultiResourceOwner.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/MultiResourceOwner.java
deleted file mode 100644
index d3cc6b3770..0000000000
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/MultiResourceOwner.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package io.javaoperatorsdk.operator.processing;
-
-import java.util.List;
-import java.util.Optional;
-
-import io.fabric8.kubernetes.api.model.HasMetadata;
-
-public interface MultiResourceOwner extends ResourceOwner {
-
- default Optional getSecondaryResource(P primary) {
- var list = getSecondaryResources(primary);
- if (list.isEmpty()) {
- return Optional.empty();
- } else if (list.size() == 1) {
- return Optional.of(list.get(0));
- } else {
- throw new IllegalStateException("More than 1 secondary resource related to primary");
- }
-
- }
-
- List getSecondaryResources(P primary);
-}
diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/AbstractCachingDependentResource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/AbstractCachingDependentResource.java
index 036a507de9..4f85cb9d1d 100644
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/AbstractCachingDependentResource.java
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/AbstractCachingDependentResource.java
@@ -4,7 +4,7 @@
import io.fabric8.kubernetes.api.model.HasMetadata;
import io.javaoperatorsdk.operator.processing.dependent.AbstractEventSourceHolderDependentResource;
-import io.javaoperatorsdk.operator.processing.event.ExternalResourceCachingEventSource;
+import io.javaoperatorsdk.operator.processing.event.source.ExternalResourceCachingEventSource;
public abstract class AbstractCachingDependentResource
extends
@@ -15,8 +15,6 @@ protected AbstractCachingDependentResource(Class resourceType) {
this.resourceType = resourceType;
}
- public abstract Optional fetchResource(P primaryResource);
-
@Override
public Class resourceType() {
return resourceType;
diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/AbstractPollingDependentResource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/AbstractPollingDependentResource.java
index 8c91dea15d..f3812a095f 100644
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/AbstractPollingDependentResource.java
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/AbstractPollingDependentResource.java
@@ -1,9 +1,10 @@
package io.javaoperatorsdk.operator.processing.dependent.external;
import io.fabric8.kubernetes.api.model.HasMetadata;
+import io.javaoperatorsdk.operator.processing.event.source.CacheKeyMapper;
public abstract class AbstractPollingDependentResource
- extends AbstractCachingDependentResource {
+ extends AbstractCachingDependentResource implements CacheKeyMapper {
public static final int DEFAULT_POLLING_PERIOD = 5000;
private long pollingPeriod;
@@ -24,4 +25,10 @@ public void setPollingPeriod(long pollingPeriod) {
public long getPollingPeriod() {
return pollingPeriod;
}
+
+ // for now dependent resources support event sources only with one owned resource.
+ @Override
+ public String keyFor(R resource) {
+ return CacheKeyMapper.singleResourceCacheKeyMapper().keyFor(resource);
+ }
}
diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/PerResourcePollingDependentResource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/PerResourcePollingDependentResource.java
index b598073a21..1afa566a3a 100644
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/PerResourcePollingDependentResource.java
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/PerResourcePollingDependentResource.java
@@ -2,12 +2,14 @@
import io.fabric8.kubernetes.api.model.HasMetadata;
import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
-import io.javaoperatorsdk.operator.processing.event.ExternalResourceCachingEventSource;
+import io.javaoperatorsdk.operator.processing.event.source.ExternalResourceCachingEventSource;
import io.javaoperatorsdk.operator.processing.event.source.polling.PerResourcePollingEventSource;
public abstract class PerResourcePollingDependentResource
extends AbstractPollingDependentResource
implements PerResourcePollingEventSource.ResourceFetcher {
+
+
public PerResourcePollingDependentResource(Class resourceType) {
super(resourceType);
}
@@ -20,6 +22,7 @@ public PerResourcePollingDependentResource(Class resourceType, long pollingPe
protected ExternalResourceCachingEventSource createEventSource(
EventSourceContext context) {
return new PerResourcePollingEventSource<>(this, context.getPrimaryCache(),
- getPollingPeriod(), resourceType());
+ getPollingPeriod(), resourceType(), this);
}
+
}
diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/PollingDependentResource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/PollingDependentResource.java
index 1cc6e22afe..9fb293b1f5 100644
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/PollingDependentResource.java
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/PollingDependentResource.java
@@ -1,28 +1,32 @@
package io.javaoperatorsdk.operator.processing.dependent.external;
-import java.util.Map;
-import java.util.function.Supplier;
-
import io.fabric8.kubernetes.api.model.HasMetadata;
import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
-import io.javaoperatorsdk.operator.processing.event.ExternalResourceCachingEventSource;
-import io.javaoperatorsdk.operator.processing.event.ResourceID;
+import io.javaoperatorsdk.operator.processing.event.source.CacheKeyMapper;
+import io.javaoperatorsdk.operator.processing.event.source.ExternalResourceCachingEventSource;
import io.javaoperatorsdk.operator.processing.event.source.polling.PollingEventSource;
public abstract class PollingDependentResource
- extends AbstractPollingDependentResource implements Supplier