Skip to content

Commit 105a55c

Browse files
committed
feat: improvements on caching and dependent resources
1 parent 819f4ad commit 105a55c

File tree

16 files changed

+29
-47
lines changed

16 files changed

+29
-47
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Context.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ default <T> Optional<T> getSecondaryResource(Class<T> expectedType) {
1717

1818
<T> Set<T> getSecondaryResources(Class<T> expectedType);
1919

20+
@Deprecated(forRemoval = true)
2021
<T> Optional<T> getSecondaryResource(Class<T> expectedType, String eventSourceName);
2122

2223
ControllerConfiguration<P> getControllerConfiguration();

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/DependentResource.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* @param <R> the dependent resource type
1111
* @param <P> the associated primary resource type
1212
*/
13-
public interface DependentResource<R, P extends HasMetadata> extends ResourceOwner<R, P> {
13+
public interface DependentResource<R, P extends HasMetadata> {
1414

1515
/**
1616
* Reconciles the dependent resource given the desired primary state
@@ -21,6 +21,13 @@ public interface DependentResource<R, P extends HasMetadata> extends ResourceOwn
2121
*/
2222
ReconcileResult<R> reconcile(P primary, Context<P> context);
2323

24+
/**
25+
* Retrieves the resource type associated with this ResourceOwner
26+
*
27+
* @return the resource type associated with this ResourceOwner
28+
*/
29+
Class<R> resourceType();
30+
2431
/**
2532
* Computes a default name for the specified DependentResource class
2633
*

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/AbstractDependentResource.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.javaoperatorsdk.operator.processing.dependent;
22

3+
import java.util.Optional;
4+
35
import org.slf4j.Logger;
46
import org.slf4j.LoggerFactory;
57

@@ -27,9 +29,10 @@ public AbstractDependentResource() {
2729
updater = updatable ? (Updater<R, P>) this : null;
2830
}
2931

32+
@SuppressWarnings("unchecked")
3033
@Override
3134
public ReconcileResult<R> reconcile(P primary, Context<P> context) {
32-
var maybeActual = getSecondaryResource(primary);
35+
Optional<R> maybeActual = getSecondaryResource(primary, context);
3336
if (creatable || updatable) {
3437
if (maybeActual.isEmpty()) {
3538
if (creatable) {
@@ -62,6 +65,10 @@ public ReconcileResult<R> reconcile(P primary, Context<P> context) {
6265
return ReconcileResult.noOperation(maybeActual.orElse(null));
6366
}
6467

68+
protected Optional<R> getSecondaryResource(P primary, Context<P> context) {
69+
return context.getSecondaryResource(resourceType());
70+
}
71+
6572
private void throwIfNull(R desired, P primary, String descriptor) {
6673
if (desired == null) {
6774
throw new DependentResourceException(

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/AbstractCachingDependentResource.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package io.javaoperatorsdk.operator.processing.dependent.external;
22

3-
import java.util.Optional;
4-
53
import io.fabric8.kubernetes.api.model.HasMetadata;
64
import io.javaoperatorsdk.operator.api.reconciler.Ignore;
75
import io.javaoperatorsdk.operator.processing.dependent.AbstractEventSourceHolderDependentResource;
@@ -22,8 +20,4 @@ public Class<R> resourceType() {
2220
return resourceType;
2321
}
2422

25-
@Override
26-
public Optional<R> getSecondaryResource(P primaryResource) {
27-
return eventSource().getSecondaryResource(primaryResource);
28-
}
2923
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/AbstractSimpleDependentResource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public AbstractSimpleDependentResource(UpdatableCache<R> cache) {
3333
}
3434

3535
@Override
36-
public Optional<R> getSecondaryResource(HasMetadata primaryResource) {
36+
public Optional<R> getSecondaryResource(P primaryResource, Context<P> context) {
3737
return cache.get(ResourceID.fromResource(primaryResource));
3838
}
3939

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package io.javaoperatorsdk.operator.processing.dependent.kubernetes;
22

33
import java.util.HashMap;
4-
import java.util.Optional;
54
import java.util.Set;
65

76
import org.slf4j.Logger;
@@ -138,7 +137,7 @@ public Result<R> match(R actualResource, P primary, Context<P> context) {
138137
}
139138

140139
public void delete(P primary, Context<P> context) {
141-
var resource = getSecondaryResource(primary);
140+
var resource = context.getSecondaryResource(primary.getClass());
142141
resource.ifPresent(r -> client.resource(r).delete());
143142
}
144143

@@ -208,10 +207,7 @@ public Class<R> resourceType() {
208207
return resourceType;
209208
}
210209

211-
@Override
212-
public Optional<R> getSecondaryResource(P primaryResource) {
213-
return eventSource().getSecondaryResource(primaryResource);
214-
}
210+
215211

216212
@Override
217213
public void setKubernetesClient(KubernetesClient kubernetesClient) {

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/ControllerConfigurationOverriderTest.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package io.javaoperatorsdk.operator.api.config;
22

3-
import java.util.Optional;
43
import java.util.Set;
54

65
import org.junit.jupiter.api.Test;
@@ -84,10 +83,6 @@ public Class<Object> resourceType() {
8483
return Object.class;
8584
}
8685

87-
@Override
88-
public Optional<Object> getSecondaryResource(ConfigMap primary) {
89-
return Optional.empty();
90-
}
9186
}
9287
}
9388

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/AbstractDependentResourceTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
class AbstractDependentResourceTest {
1818

19-
2019
@Test
2120
void throwsExceptionIfDesiredIsNullOnCreate() {
2221
TestDependentResource testDependentResource = new TestDependentResource();
@@ -80,7 +79,8 @@ public Class<ConfigMap> resourceType() {
8079
}
8180

8281
@Override
83-
public Optional<ConfigMap> getSecondaryResource(TestCustomResource primary) {
82+
protected Optional<ConfigMap> getSecondaryResource(TestCustomResource primary,
83+
Context<TestCustomResource> context) {
8484
return Optional.ofNullable(secondary);
8585
}
8686

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/EmptyTestDependentResource.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package io.javaoperatorsdk.operator.processing.dependent;
22

3-
import java.util.Optional;
4-
53
import io.fabric8.kubernetes.api.model.apps.Deployment;
64
import io.javaoperatorsdk.operator.api.reconciler.Context;
75
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource;
@@ -17,11 +15,6 @@ public ReconcileResult<Deployment> reconcile(TestCustomResource primary,
1715
return null;
1816
}
1917

20-
@Override
21-
public Optional<Deployment> getSecondaryResource(TestCustomResource primaryResource) {
22-
return Optional.empty();
23-
}
24-
2518
@Override
2619
public Class<Deployment> resourceType() {
2720
return Deployment.class;

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/external/AbstractSimpleDependentResourceTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,14 @@ void getsTheResourceFromSupplyIfReconciling() {
4545
simpleDependentResource.reconcile(TestUtils.testCustomResource1(), null);
4646

4747
verify(supplierMock, times(1)).get();
48-
assertThat(simpleDependentResource.getSecondaryResource(TestUtils.testCustomResource1()))
48+
assertThat(simpleDependentResource.getSecondaryResource(TestUtils.testCustomResource1(), null))
4949
.isPresent()
5050
.isEqualTo(Optional.of(SampleExternalResource.testResource1()));
5151
}
5252

5353
@Test
5454
void getResourceReadsTheResourceFromCache() {
55-
simpleDependentResource.getSecondaryResource(TestUtils.testCustomResource1());
55+
simpleDependentResource.getSecondaryResource(TestUtils.testCustomResource1(), null);
5656

5757
verify(supplierMock, times(0)).get();
5858
verify(updatableCacheMock, times(1)).get(any());

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/AbstractWorkflowExecutorTest.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import java.util.ArrayList;
44
import java.util.Collections;
55
import java.util.List;
6-
import java.util.Optional;
76

87
import io.javaoperatorsdk.operator.api.reconciler.Context;
98
import io.javaoperatorsdk.operator.api.reconciler.dependent.Deleter;
@@ -49,11 +48,6 @@ public Class<String> resourceType() {
4948
return String.class;
5049
}
5150

52-
@Override
53-
public Optional<String> getSecondaryResource(TestCustomResource primary) {
54-
return Optional.of(VALUE);
55-
}
56-
5751
@Override
5852
public String toString() {
5953
return name;
@@ -113,11 +107,6 @@ public Class<String> resourceType() {
113107
return String.class;
114108
}
115109

116-
@Override
117-
public Optional<String> getSecondaryResource(TestCustomResource primary) {
118-
return Optional.of(VALUE);
119-
}
120-
121110
@Override
122111
public String toString() {
123112
return name;

operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/standalonedependent/StandaloneDependentTestReconciler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public UpdateControl<StandaloneDependentTestCustomResource> reconcile(
4747
StandaloneDependentTestCustomResource primary,
4848
Context<StandaloneDependentTestCustomResource> context) {
4949
deploymentDependent.reconcile(primary, context);
50-
Optional<Deployment> deployment = deploymentDependent.getSecondaryResource(primary);
50+
Optional<Deployment> deployment = context.getSecondaryResource(Deployment.class);
5151
if (deployment.isEmpty()) {
5252
throw new IllegalStateException("Resource should not be empty after reconcile.");
5353
}

operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/workflowallfeature/ConfigMapDeletePostCondition.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public class ConfigMapDeletePostCondition
1717
public boolean isMet(
1818
DependentResource<ConfigMap, WorkflowAllFeatureCustomResource> dependentResource,
1919
WorkflowAllFeatureCustomResource primary, Context<WorkflowAllFeatureCustomResource> context) {
20-
var configMapDeleted = dependentResource.getSecondaryResource(primary).isEmpty();
20+
var configMapDeleted = context.getSecondaryResource(ConfigMap.class).isEmpty();
2121
log.debug("Config Map Deleted: {}", configMapDeleted);
2222
return configMapDeleted;
2323
}

operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/workflowallfeature/DeploymentReadyCondition.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public boolean isMet(
1212
DependentResource<Deployment, WorkflowAllFeatureCustomResource> dependentResource,
1313
WorkflowAllFeatureCustomResource primary, Context<WorkflowAllFeatureCustomResource> context) {
1414

15-
var deployment = dependentResource.getSecondaryResource(primary).orElseThrow();
15+
var deployment = context.getSecondaryResource(Deployment.class).orElseThrow();
1616
var readyReplicas = deployment.getStatus().getReadyReplicas();
1717

1818
return readyReplicas != null && deployment.getSpec().getReplicas().equals(readyReplicas);

sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageDependentsWorkflowReconciler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public UpdateControl<WebPage> reconcile(WebPage webPage, Context<WebPage> contex
6969

7070
webPage.setStatus(
7171
createStatus(
72-
configMapDR.getSecondaryResource(webPage).orElseThrow().getMetadata().getName()));
72+
context.getSecondaryResource(ConfigMap.class).orElseThrow().getMetadata().getName()));
7373
return UpdateControl.patchStatus(webPage);
7474
}
7575

sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageStandaloneDependentsReconciler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public UpdateControl<WebPage> reconcile(WebPage webPage, Context<WebPage> contex
6565

6666
webPage.setStatus(
6767
createStatus(
68-
configMapDR.getSecondaryResource(webPage).orElseThrow().getMetadata().getName()));
68+
context.getSecondaryResource(ConfigMap.class).orElseThrow().getMetadata().getName()));
6969
return UpdateControl.patchStatus(webPage);
7070
}
7171

0 commit comments

Comments
 (0)