Skip to content

Commit 2fe5d60

Browse files
committed
feat: introduce ResourceOwner to be unify type and resource retrieval
1 parent c5d828e commit 2fe5d60

File tree

24 files changed

+81
-73
lines changed

24 files changed

+81
-73
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public Optional<RetryInfo> getRetryInfo() {
3232
public <T> Optional<T> getSecondaryResource(Class<T> expectedType, String eventSourceName) {
3333
return controller.getEventSourceManager()
3434
.getResourceEventSourceFor(expectedType, eventSourceName)
35-
.flatMap(es -> es.getAssociated(primaryResource));
35+
.flatMap(es -> es.getAssociatedResource(primaryResource));
3636
}
3737

3838
@Override

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

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
package io.javaoperatorsdk.operator.api.reconciler.dependent;
22

3-
import java.util.Optional;
4-
53
import io.fabric8.kubernetes.api.model.HasMetadata;
64
import io.javaoperatorsdk.operator.api.reconciler.Context;
5+
import io.javaoperatorsdk.operator.processing.ResourceOwner;
76

87
/**
98
* An interface to implement and provide dependent resource support.
109
*
1110
* @param <R> the dependent resource type
1211
* @param <P> the associated primary resource type
1312
*/
14-
public interface DependentResource<R, P extends HasMetadata> {
13+
public interface DependentResource<R, P extends HasMetadata> extends ResourceOwner<R, P> {
1514

1615
/**
1716
* Reconciles the dependent resource given the desired primary state
@@ -22,23 +21,6 @@ public interface DependentResource<R, P extends HasMetadata> {
2221
*/
2322
ReconcileResult<R> reconcile(P primary, Context<P> context);
2423

25-
/**
26-
* Retrieves the dependent resource associated with the specified primary one
27-
*
28-
* @param primaryResource the primary resource for which we want to retrieve the secondary
29-
* resource
30-
* @return an {@link Optional} containing the secondary resource or {@link Optional#empty()} if it
31-
* doesn't exist
32-
*/
33-
Optional<R> getResource(P primaryResource);
34-
35-
/**
36-
* Retrieves the resource type associated with this DependentResource
37-
*
38-
* @return the resource type associated with this DependentResource
39-
*/
40-
Class<R> resourceType();
41-
4224
/**
4325
* Computes a default name for the specified DependentResource class
4426
*
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package io.javaoperatorsdk.operator.processing;
2+
3+
import java.util.Optional;
4+
5+
import io.fabric8.kubernetes.api.model.HasMetadata;
6+
7+
public interface ResourceOwner<R, P extends HasMetadata> {
8+
9+
/**
10+
* Retrieves the resource type associated with this ResourceOwner
11+
*
12+
* @return the resource type associated with this ResourceOwner
13+
*/
14+
Class<R> resourceType();
15+
16+
/**
17+
* Retrieves the resource associated with the specified primary one
18+
*
19+
* @param primary the primary resource for which we want to retrieve the secondary resource
20+
* @return an {@link Optional} containing the secondary resource or {@link Optional#empty()} if it
21+
* doesn't exist
22+
*/
23+
Optional<R> getAssociatedResource(P primary);
24+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public AbstractDependentResource() {
2828

2929
@Override
3030
public ReconcileResult<R> reconcile(P primary, Context<P> context) {
31-
var maybeActual = getResource(primary);
31+
var maybeActual = getAssociatedResource(primary);
3232
if (creatable || updatable) {
3333
if (maybeActual.isEmpty()) {
3434
if (creatable) {

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,11 @@
1010
import io.javaoperatorsdk.operator.processing.event.EventHandler;
1111
import io.javaoperatorsdk.operator.processing.event.ResourceID;
1212
import io.javaoperatorsdk.operator.processing.event.source.EventSource;
13+
import io.javaoperatorsdk.operator.processing.event.source.ResourceEventSource;
1314

14-
public abstract class AbstractEventSourceHolderDependentResource<R, P extends HasMetadata, T extends EventSource>
15-
extends AbstractDependentResource<R, P> implements EventSource, EventSourceProvider<P> {
15+
public abstract class AbstractEventSourceHolderDependentResource<R, P extends HasMetadata, T extends ResourceEventSource<R, P>>
16+
extends AbstractDependentResource<R, P>
17+
implements ResourceEventSource<R, P>, EventSourceProvider<P> {
1618
private T eventSource;
1719
private boolean isFilteringEventSource;
1820
private boolean isCacheFillerEventSource;

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ protected AbstractCachingDependentResource(Class<R> resourceType) {
1616
}
1717

1818
public Optional<R> fetchResource(P primaryResource) {
19-
return eventSource().getAssociated(primaryResource);
19+
return eventSource().getAssociatedResource(primaryResource);
2020
}
2121

2222
@Override
@@ -25,7 +25,7 @@ public Class<R> resourceType() {
2525
}
2626

2727
@Override
28-
public Optional<R> getResource(P primaryResource) {
29-
return eventSource().getAssociated(primaryResource);
28+
public Optional<R> getAssociatedResource(P primaryResource) {
29+
return eventSource().getAssociatedResource(primaryResource);
3030
}
3131
}

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
@@ -31,7 +31,7 @@ public AbstractSimpleDependentResource(UpdatableCache<R> cache) {
3131
}
3232

3333
@Override
34-
public Optional<R> getResource(HasMetadata primaryResource) {
34+
public Optional<R> getAssociatedResource(HasMetadata primaryResource) {
3535
return cache.get(ResourceID.fromResource(primaryResource));
3636
}
3737

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public Result<R> match(R actualResource, P primary, Context<P> context) {
9797

9898
public void delete(P primary, Context<P> context) {
9999
if (!addOwnerReference()) {
100-
var resource = getResource(primary);
100+
var resource = getAssociatedResource(primary);
101101
resource.ifPresent(r -> client.resource(r).delete());
102102
}
103103
}
@@ -134,8 +134,8 @@ public Class<R> resourceType() {
134134
}
135135

136136
@Override
137-
public Optional<R> getResource(P primaryResource) {
138-
return eventSource().getAssociated(primaryResource);
137+
public Optional<R> getAssociatedResource(P primaryResource) {
138+
return eventSource().getAssociatedResource(primaryResource);
139139
}
140140

141141
@Override

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSourceManager.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ private void logEventSourceEvent(NamedEventSource eventSource, String event) {
8686
if (eventSource instanceof ResourceEventSource) {
8787
ResourceEventSource source = (ResourceEventSource) eventSource;
8888
log.debug("{} event source {} for {}", event, eventSource.name(),
89-
source.getResourceClass());
89+
source.resourceType());
9090
} else {
9191
log.debug("{} event source {}", event, eventSource.name());
9292
}
@@ -171,12 +171,12 @@ public ControllerResourceEventSource<R> getControllerResourceEventSource() {
171171
return eventSources.controllerResourceEventSource();
172172
}
173173

174-
public <S> Optional<ResourceEventSource<R, S>> getResourceEventSourceFor(
174+
public <S> Optional<ResourceEventSource<S, R>> getResourceEventSourceFor(
175175
Class<S> dependentType) {
176176
return getResourceEventSourceFor(dependentType, null);
177177
}
178178

179-
public <S> Optional<ResourceEventSource<R, S>> getResourceEventSourceFor(
179+
public <S> Optional<ResourceEventSource<S, R>> getResourceEventSourceFor(
180180
Class<S> dependentType, String qualifier) {
181181
if (dependentType == null) {
182182
return Optional.empty();

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSources.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import io.fabric8.kubernetes.api.model.HasMetadata;
1111
import io.javaoperatorsdk.operator.processing.Controller;
12+
import io.javaoperatorsdk.operator.processing.ResourceOwner;
1213
import io.javaoperatorsdk.operator.processing.event.source.EventSource;
1314
import io.javaoperatorsdk.operator.processing.event.source.ResourceEventSource;
1415
import io.javaoperatorsdk.operator.processing.event.source.controller.ControllerResourceEventSource;
@@ -68,8 +69,8 @@ public void add(String name, EventSource eventSource) {
6869

6970
@SuppressWarnings("rawtypes")
7071
private Class<?> getDependentType(EventSource source) {
71-
return source instanceof ResourceEventSource
72-
? ((ResourceEventSource) source).getResourceClass()
72+
return source instanceof ResourceOwner
73+
? ((ResourceOwner) source).resourceType()
7374
: source.getClass();
7475
}
7576

@@ -84,7 +85,7 @@ private String keyFor(Class<?> dependentType) {
8485
// this is needed so that these sources are set when informer sources start so that events can
8586
// properly be processed
8687
if (controllerResourceEventSource != null
87-
&& key.equals(controllerResourceEventSource.getResourceClass().getCanonicalName())) {
88+
&& key.equals(controllerResourceEventSource.resourceType().getCanonicalName())) {
8889
key = 1 + "-" + key;
8990
} else if (key.equals(retryAndRescheduleTimerEventSource.getClass().getCanonicalName())) {
9091
key = 0 + "-" + key;
@@ -93,7 +94,7 @@ private String keyFor(Class<?> dependentType) {
9394
}
9495

9596
@SuppressWarnings("unchecked")
96-
public <S> ResourceEventSource<R, S> get(Class<S> dependentType, String name) {
97+
public <S> ResourceEventSource<S, R> get(Class<S> dependentType, String name) {
9798
final var sourcesForType = sources.get(keyFor(dependentType));
9899
if (sourcesForType == null || sourcesForType.isEmpty()) {
99100
return null;
@@ -122,8 +123,8 @@ public <S> ResourceEventSource<R, S> get(Class<S> dependentType, String name) {
122123
+ keyAsString(dependentType, name) + " is not a "
123124
+ ResourceEventSource.class.getSimpleName());
124125
}
125-
final var res = (ResourceEventSource<R, S>) source;
126-
final var resourceClass = res.getResourceClass();
126+
final var res = (ResourceEventSource<S, R>) source;
127+
final var resourceClass = res.resourceType();
127128
if (!resourceClass.isAssignableFrom(dependentType)) {
128129
throw new IllegalArgumentException(source + " associated with "
129130
+ keyAsString(dependentType, name)

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/AbstractResourceEventSource.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44

55
public abstract class AbstractResourceEventSource<P extends HasMetadata, R>
66
extends AbstractEventSource
7-
implements ResourceEventSource<P, R> {
7+
implements ResourceEventSource<R, P> {
88
private final Class<R> resourceClass;
99

1010
protected AbstractResourceEventSource(Class<R> resourceClass) {
1111
this.resourceClass = resourceClass;
1212
}
1313

1414
@Override
15-
public Class<R> getResourceClass() {
15+
public Class<R> resourceType() {
1616
return resourceClass;
1717
}
1818
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/CachingEventSource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public Optional<R> getCachedValue(ResourceID resourceID) {
5454
}
5555

5656
@Override
57-
public Optional<R> getAssociated(P primary) {
57+
public Optional<R> getAssociatedResource(P primary) {
5858
return cache.get(ResourceID.fromResource(primary));
5959
}
6060

Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
package io.javaoperatorsdk.operator.processing.event.source;
22

3-
import java.util.Optional;
4-
53
import io.fabric8.kubernetes.api.model.HasMetadata;
4+
import io.javaoperatorsdk.operator.processing.ResourceOwner;
65

7-
public interface ResourceEventSource<P extends HasMetadata, R> extends EventSource {
8-
9-
Class<R> getResourceClass();
6+
public interface ResourceEventSource<R, P extends HasMetadata> extends EventSource,
7+
ResourceOwner<R, P> {
108

11-
Optional<R> getAssociated(P primary);
129
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/ControllerResourceEventSource.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public class ControllerResourceEventSource<T extends HasMetadata>
2929
private final Controller<T> controller;
3030
private final ResourceEventFilter<T> filter;
3131

32+
@SuppressWarnings("unchecked")
3233
public ControllerResourceEventSource(Controller<T> controller) {
3334
super(controller.getCRClient(), controller.getConfiguration());
3435
this.controller = controller;
@@ -101,7 +102,7 @@ private void handleKubernetesClientException(Exception e) {
101102
}
102103

103104
@Override
104-
public Optional<T> getAssociated(T primary) {
105+
public Optional<T> getAssociatedResource(T primary) {
105106
return get(ResourceID.fromResource(primary));
106107
}
107108
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerEventSource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ private void propagateEvent(R object) {
152152
* @return the informed resource associated with the specified primary resource
153153
*/
154154
@Override
155-
public Optional<R> getAssociated(P resource) {
155+
public Optional<R> getAssociatedResource(P resource) {
156156
final var id = configuration.getAssociatedResourceIdentifier().associatedSecondaryID(resource);
157157
return get(id);
158158
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/ManagedInformerEventSource.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public Optional<R> get(ResourceID resourceID) {
9393
}
9494

9595
@Override
96-
public Optional<R> getAssociated(P primary) {
96+
public Optional<R> getAssociatedResource(P primary) {
9797
return get(ResourceID.fromResource(primary));
9898
}
9999

@@ -119,9 +119,7 @@ public Stream<R> list(String namespace, Predicate<R> predicate) {
119119
return manager().list(namespace, predicate);
120120
}
121121

122-
ManagedInformerEventSource<R, P, C> setTemporalResourceCache(
123-
TemporaryResourceCache<R> temporaryResourceCache) {
122+
void setTemporalResourceCache(TemporaryResourceCache<R> temporaryResourceCache) {
124123
this.temporaryResourceCache = temporaryResourceCache;
125-
return this;
126124
}
127125
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ public void run() {
132132
* @return the related resource for this event source
133133
*/
134134
@Override
135-
public Optional<R> getAssociated(P primary) {
135+
public Optional<R> getAssociatedResource(P primary) {
136136
return getValueFromCacheOrSupplier(ResourceID.fromResource(primary));
137137
}
138138

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PollingEventSource.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package io.javaoperatorsdk.operator.processing.event.source.polling;
22

3-
import java.util.*;
3+
import java.util.Map;
4+
import java.util.Optional;
5+
import java.util.Timer;
6+
import java.util.TimerTask;
47
import java.util.function.Supplier;
58

69
import org.slf4j.Logger;
@@ -95,7 +98,7 @@ public void stop() throws OperatorException {
9598
* @return related resource
9699
*/
97100
@Override
98-
public Optional<R> getAssociated(P primary) {
101+
public Optional<R> getAssociatedResource(P primary) {
99102
return getCachedValue(ResourceID.fromResource(primary));
100103
}
101104
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public ReconcileResult<Deployment> reconcile(TestCustomResource primary,
9898
}
9999

100100
@Override
101-
public Optional<Deployment> getResource(TestCustomResource primaryResource) {
101+
public Optional<Deployment> getAssociatedResource(TestCustomResource primaryResource) {
102102
return Optional.empty();
103103
}
104104

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.getResource(TestUtils.testCustomResource1()))
48+
assertThat(simpleDependentResource.getAssociatedResource(TestUtils.testCustomResource1()))
4949
.isPresent()
5050
.isEqualTo(Optional.of(SampleExternalResource.testResource1()));
5151
}
5252

5353
@Test
5454
void getResourceReadsTheResourceFromCache() {
55-
simpleDependentResource.getResource(TestUtils.testCustomResource1());
55+
simpleDependentResource.getAssociatedResource(TestUtils.testCustomResource1());
5656

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

0 commit comments

Comments
 (0)