Skip to content

Commit 8b5e8c1

Browse files
committed
wip
1 parent bb8cb80 commit 8b5e8c1

File tree

14 files changed

+44
-37
lines changed

14 files changed

+44
-37
lines changed

docs/content/en/docs/documentation/dependent-resource-and-workflows/dependent-resources.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -370,13 +370,13 @@ or we can use a matcher based SSA in most of the cases if the resource is manage
370370

371371
Unfortunately this is not true for external resources. So to make sure we are selecting
372372
the target resources from an event source, we provide a [mechanism](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/AbstractExternalDependentResource.java#L114-L138) that helps with that logic.
373-
Your POJO representing an external resource can implement [`ExternalResourceIDProvider`](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/ExternalDependentIDProvider.java) :
373+
Your POJO representing an external resource can implement [`ResourceIDProvider`](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/ResourceIDProvider.java) :
374374

375375
```java
376376

377-
public interface ExternalDependentIDProvider<T> {
377+
public interface ResourceIDProvider<T> {
378378

379-
T externalResourceId();
379+
T resourceId();
380380
}
381381
```
382382

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,18 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
package io.javaoperatorsdk.operator.processing.dependent;
16+
package io.javaoperatorsdk.operator.processing;
1717

1818
/**
19-
* Provides the identifier for an object that represents an external resource. This ID is used to
20-
* select target resource for a dependent resource from the resources returned by `{@link
21-
* io.javaoperatorsdk.operator.api.reconciler.Context#getSecondaryResources(Class)}`.
19+
* Provides the identifier for an object that represents resource. This ID is used to select target
20+
* external resource for a dependent resource from the resources returned by `{@link
21+
* io.javaoperatorsdk.operator.api.reconciler.Context#getSecondaryResources(Class)}`. But also for
22+
* {@link io.javaoperatorsdk.operator.processing.event.source.CacheKeyMapper} for event sources in
23+
* external resources
2224
*
2325
* @param <T>
2426
*/
25-
public interface ExternalDependentIDProvider<T> {
27+
public interface ResourceIDProvider<T> {
2628

27-
T externalResourceId();
29+
T resourceId();
2830
}

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

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import io.fabric8.kubernetes.api.model.HasMetadata;
2323
import io.javaoperatorsdk.operator.api.reconciler.Context;
2424
import io.javaoperatorsdk.operator.api.reconciler.dependent.RecentOperationCacheFiller;
25+
import io.javaoperatorsdk.operator.processing.ResourceIDProvider;
2526
import io.javaoperatorsdk.operator.processing.event.EventSourceRetriever;
2627
import io.javaoperatorsdk.operator.processing.event.ResourceID;
2728
import io.javaoperatorsdk.operator.processing.event.source.EventSource;
@@ -131,14 +132,11 @@ protected Optional<R> selectTargetSecondaryResource(
131132
Set<R> secondaryResources, P primary, Context<P> context) {
132133
R desired = desired(primary, context);
133134
List<R> targetResources;
134-
if (desired instanceof ExternalDependentIDProvider<?> desiredWithId) {
135+
if (desired instanceof ResourceIDProvider<?> desiredWithId) {
135136
targetResources =
136137
secondaryResources.stream()
137138
.filter(
138-
r ->
139-
((ExternalDependentIDProvider<?>) r)
140-
.externalResourceId()
141-
.equals(desiredWithId.externalResourceId()))
139+
r -> ((ResourceIDProvider<?>) r).resourceId().equals(desiredWithId.resourceId()))
142140
.toList();
143141
} else {
144142
throw new IllegalStateException(

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,6 @@ public Duration getPollingPeriod() {
5353
// for now dependent resources support event sources only with one owned resource.
5454
@Override
5555
public ID keyFor(R resource) {
56-
return CacheKeyMapper.<R, ID>externalIdProviderMapper().keyFor(resource);
56+
return CacheKeyMapper.<R, ID>resourceIdProviderMapper().keyFor(resource);
5757
}
5858
}

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

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@
1515
*/
1616
package io.javaoperatorsdk.operator.processing.event.source;
1717

18-
import io.javaoperatorsdk.operator.processing.dependent.ExternalDependentIDProvider;
18+
import io.javaoperatorsdk.operator.processing.ResourceIDProvider;
1919

2020
public interface CacheKeyMapper<R, ID> {
2121

2222
ID keyFor(R resource);
2323

2424
/**
25-
* Used if a polling event source handles only single secondary resource. See also docs for:
26-
* {@link ExternalResourceCachingEventSource}
25+
* Used if a polling event source handles only single secondary resource and the id is String. See
26+
* also docs for: {@link ExternalResourceCachingEventSource}
2727
*
2828
* @return static id mapper, all resources are mapped for same id.
2929
* @param <T> secondary resource type
@@ -32,11 +32,10 @@ static <T> CacheKeyMapper<T, String> singleResourceCacheKeyMapper() {
3232
return r -> "id";
3333
}
3434

35-
static <T, ID> CacheKeyMapper<T, ID> externalIdProviderMapper() {
36-
35+
static <T, ID> CacheKeyMapper<T, ID> resourceIdProviderMapper() {
3736
return r -> {
38-
if (r instanceof ExternalDependentIDProvider externalDependentIDProvider) {
39-
return (ID) externalDependentIDProvider.externalResourceId();
37+
if (r instanceof ResourceIDProvider resourceIDProvider) {
38+
return (ID) resourceIDProvider.resourceId();
4039
} else {
4140
throw new IllegalStateException(
4241
"Resource does not implement ExternalDependentIDProvider: " + r.getClass());

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232

3333
import io.fabric8.kubernetes.api.model.HasMetadata;
3434
import io.javaoperatorsdk.operator.api.reconciler.dependent.RecentOperationCacheFiller;
35+
import io.javaoperatorsdk.operator.processing.ResourceIDProvider;
3536
import io.javaoperatorsdk.operator.processing.event.Event;
3637
import io.javaoperatorsdk.operator.processing.event.ResourceID;
3738

@@ -72,6 +73,11 @@ protected ExternalResourceCachingEventSource(
7273
protected ExternalResourceCachingEventSource(
7374
String name, Class<R> resourceClass, CacheKeyMapper<R, ID> cacheKeyMapper) {
7475
super(resourceClass, name);
76+
if (cacheKeyMapper == CacheKeyMapper.resourceIdProviderMapper()
77+
&& !ResourceIDProvider.class.isAssignableFrom(resourceClass)) {
78+
throw new IllegalArgumentException(
79+
"resource class is not a " + ResourceIDProvider.class.getSimpleName());
80+
}
7581
this.cacheKeyMapper = cacheKeyMapper;
7682
}
7783

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public PerResourcePollingConfiguration(
4747
? new ScheduledThreadPoolExecutor(DEFAULT_EXECUTOR_THREAD_NUMBER)
4848
: executorService;
4949
this.cacheKeyMapper =
50-
cacheKeyMapper == null ? CacheKeyMapper.externalIdProviderMapper() : cacheKeyMapper;
50+
cacheKeyMapper == null ? CacheKeyMapper.resourceIdProviderMapper() : cacheKeyMapper;
5151
this.resourceFetcher = Objects.requireNonNull(resourceFetcher);
5252
this.registerPredicate = registerPredicate;
5353
this.defaultPollingPeriod = defaultPollingPeriod;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,6 @@ public PollingConfiguration(
3535
this.genericResourceFetcher = Objects.requireNonNull(genericResourceFetcher);
3636
this.period = period;
3737
this.cacheKeyMapper =
38-
cacheKeyMapper == null ? CacheKeyMapper.externalIdProviderMapper() : cacheKeyMapper;
38+
cacheKeyMapper == null ? CacheKeyMapper.resourceIdProviderMapper() : cacheKeyMapper;
3939
}
4040
}

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/SampleExternalResource.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@
1818
import java.io.Serializable;
1919
import java.util.Objects;
2020

21-
import io.javaoperatorsdk.operator.processing.dependent.ExternalDependentIDProvider;
21+
import io.javaoperatorsdk.operator.processing.ResourceIDProvider;
2222
import io.javaoperatorsdk.operator.processing.event.ResourceID;
2323

24-
public class SampleExternalResource implements Serializable, ExternalDependentIDProvider<String> {
24+
public class SampleExternalResource implements Serializable, ResourceIDProvider<String> {
2525

2626
public static final String DEFAULT_VALUE_1 = "value1";
2727
public static final String DEFAULT_VALUE_2 = "value2";
@@ -84,7 +84,7 @@ public int hashCode() {
8484
}
8585

8686
@Override
87-
public String externalResourceId() {
87+
public String resourceId() {
8888
return name;
8989
}
9090
}

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSourceTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ void registeringTaskOnAPredicate() {
9999
supplier, Duration.ofMillis(PERIOD))
100100
.withRegisterPredicate(
101101
testCustomResource -> testCustomResource.getMetadata().getGeneration() > 1)
102-
.withCacheKeyMapper(CacheKeyMapper.externalIdProviderMapper())
102+
.withCacheKeyMapper(CacheKeyMapper.resourceIdProviderMapper())
103103
.build()));
104104

105105
source.onResourceCreated(testCustomResource);

0 commit comments

Comments
 (0)