Skip to content

Commit 09b90de

Browse files
committed
wip
Signed-off-by: Attila Mészáros <[email protected]>
1 parent 3a0bf7a commit 09b90de

File tree

13 files changed

+123
-45
lines changed

13 files changed

+123
-45
lines changed

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

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,17 @@
33
import java.time.Duration;
44
import java.util.Optional;
55
import java.util.concurrent.TimeUnit;
6+
import java.util.function.BiPredicate;
67

7-
public abstract class BaseControl<T extends BaseControl<T>> {
8+
import io.fabric8.kubernetes.api.model.HasMetadata;
9+
import io.javaoperatorsdk.operator.api.reconciler.expectation.Expectation;
10+
import io.javaoperatorsdk.operator.api.reconciler.expectation.ExpectationAdapter;
11+
import io.javaoperatorsdk.operator.api.reconciler.expectation.ExpectationContext;
12+
13+
public abstract class BaseControl<T extends BaseControl<T, P>, P extends HasMetadata> {
814

915
private Long scheduleDelay = null;
16+
private Expectation<P> expectation;
1017

1118
public T rescheduleAfter(long delay) {
1219
rescheduleAfter(Duration.ofMillis(delay));
@@ -25,4 +32,16 @@ public T rescheduleAfter(long delay, TimeUnit timeUnit) {
2532
public Optional<Long> getScheduleDelay() {
2633
return Optional.ofNullable(scheduleDelay);
2734
}
35+
36+
public void expect(Expectation<P> expectation) {
37+
this.expectation = expectation;
38+
}
39+
40+
public void expect(BiPredicate<P, ExpectationContext<P>> expectation, Duration timeout) {
41+
this.expectation = new ExpectationAdapter<>(expectation, timeout);
42+
}
43+
44+
public Expectation<P> getExpectation() {
45+
return expectation;
46+
}
2847
}
Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,44 @@
11
package io.javaoperatorsdk.operator.api.reconciler;
22

3+
import java.util.Optional;
4+
import java.util.Set;
5+
import java.util.stream.Stream;
6+
37
import io.fabric8.kubernetes.api.model.HasMetadata;
48
import io.javaoperatorsdk.operator.api.config.ControllerConfiguration;
59
import io.javaoperatorsdk.operator.processing.event.EventSourceRetriever;
610
import io.javaoperatorsdk.operator.processing.event.source.IndexerResourceCache;
711

8-
import java.util.Optional;
9-
import java.util.Set;
10-
import java.util.stream.Stream;
11-
1212
public interface CacheAware<P extends HasMetadata> {
13-
default <R> Optional<R> getSecondaryResource(Class<R> expectedType) {
14-
return getSecondaryResource(expectedType, null);
15-
}
13+
default <R> Optional<R> getSecondaryResource(Class<R> expectedType) {
14+
return getSecondaryResource(expectedType, null);
15+
}
1616

17-
<R> Set<R> getSecondaryResources(Class<R> expectedType);
17+
<R> Set<R> getSecondaryResources(Class<R> expectedType);
1818

19-
default <R> Stream<R> getSecondaryResourcesAsStream(Class<R> expectedType) {
20-
return getSecondaryResources(expectedType).stream();
21-
}
19+
default <R> Stream<R> getSecondaryResourcesAsStream(Class<R> expectedType) {
20+
return getSecondaryResources(expectedType).stream();
21+
}
2222

23-
<R> Optional<R> getSecondaryResource(Class<R> expectedType, String eventSourceName);
23+
<R> Optional<R> getSecondaryResource(Class<R> expectedType, String eventSourceName);
2424

25-
ControllerConfiguration<P> getControllerConfiguration();
25+
ControllerConfiguration<P> getControllerConfiguration();
2626

27-
/**
28-
* Retrieves the primary resource.
29-
*
30-
* @return the primary resource associated with the current reconciliation
31-
*/
32-
P getPrimaryResource();
27+
/**
28+
* Retrieves the primary resource.
29+
*
30+
* @return the primary resource associated with the current reconciliation
31+
*/
32+
P getPrimaryResource();
3333

34-
/**
35-
* Retrieves the primary resource cache.
36-
*
37-
* @return the {@link IndexerResourceCache} associated with the associated {@link Reconciler} for
38-
* this context
39-
*/
40-
@SuppressWarnings("unused")
41-
IndexedResourceCache<P> getPrimaryCache();
34+
/**
35+
* Retrieves the primary resource cache.
36+
*
37+
* @return the {@link IndexerResourceCache} associated with the associated {@link Reconciler} for
38+
* this context
39+
*/
40+
@SuppressWarnings("unused")
41+
IndexedResourceCache<P> getPrimaryCache();
4242

43-
EventSourceRetriever<P> eventSourceRetriever();
43+
EventSourceRetriever<P> eventSourceRetriever();
4444
}

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

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

33
import java.util.Optional;
4-
import java.util.Set;
54
import java.util.concurrent.ExecutorService;
6-
import java.util.stream.Stream;
75

86
import io.fabric8.kubernetes.api.model.HasMetadata;
97
import io.fabric8.kubernetes.client.KubernetesClient;
10-
import io.javaoperatorsdk.operator.api.config.ControllerConfiguration;
118
import io.javaoperatorsdk.operator.api.reconciler.dependent.managed.ManagedWorkflowAndDependentResourceContext;
12-
import io.javaoperatorsdk.operator.processing.event.EventSourceRetriever;
139
import io.javaoperatorsdk.operator.processing.event.source.IndexerResourceCache;
1410

1511
public interface Context<P extends HasMetadata> extends CacheAware<P> {

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

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

3-
public class DeleteControl extends BaseControl<DeleteControl> {
3+
import io.fabric8.kubernetes.api.model.HasMetadata;
4+
5+
public class DeleteControl<P extends HasMetadata> extends BaseControl<DeleteControl<P>, P> {
46

57
private final boolean removeFinalizer;
68

@@ -27,7 +29,7 @@ public static DeleteControl defaultDelete() {
2729
*
2830
* @return delete control that will not remove finalizer.
2931
*/
30-
public static DeleteControl noFinalizerRemoval() {
32+
public static <T extends HasMetadata> DeleteControl<T> noFinalizerRemoval() {
3133
return new DeleteControl(false);
3234
}
3335

@@ -36,7 +38,7 @@ public boolean isRemoveFinalizer() {
3638
}
3739

3840
@Override
39-
public DeleteControl rescheduleAfter(long delay) {
41+
public DeleteControl<P> rescheduleAfter(long delay) {
4042
if (removeFinalizer) {
4143
throw new IllegalStateException("Cannot reschedule cleanup if removing finalizer");
4244
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import io.fabric8.kubernetes.api.model.HasMetadata;
77

88
public class ErrorStatusUpdateControl<P extends HasMetadata>
9-
extends BaseControl<ErrorStatusUpdateControl<P>> {
9+
extends BaseControl<ErrorStatusUpdateControl<P>, P> {
1010

1111
private final P resource;
1212
private boolean noRetry = false;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import io.fabric8.kubernetes.api.model.HasMetadata;
66
import io.fabric8.kubernetes.client.CustomResource;
77

8-
public class UpdateControl<P extends HasMetadata> extends BaseControl<UpdateControl<P>> {
8+
public class UpdateControl<P extends HasMetadata> extends BaseControl<UpdateControl<P>, P> {
99

1010
private final P resource;
1111
private final boolean patchResource;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package io.javaoperatorsdk.operator.api.reconciler.expectation;
2+
3+
import java.time.Duration;
4+
5+
import io.fabric8.kubernetes.api.model.HasMetadata;
6+
7+
public abstract class AbstractExpectation<P extends HasMetadata> implements Expectation<P> {
8+
9+
protected final Duration timeout;
10+
11+
protected AbstractExpectation(Duration timeout) {
12+
this.timeout = timeout;
13+
}
14+
15+
@Override
16+
public abstract boolean isFulfilled(P primary, ExpectationContext<P> context);
17+
18+
@Override
19+
public Duration timeout() {
20+
return timeout;
21+
}
22+
}
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package io.javaoperatorsdk.operator.api.reconciler.expectation;
22

3-
import io.fabric8.kubernetes.api.model.HasMetadata;
4-
53
import java.time.Duration;
64

5+
import io.fabric8.kubernetes.api.model.HasMetadata;
6+
77
public interface Expectation<P extends HasMetadata> {
88

9-
boolean isMet(P primary, ExpectationContext<P> context);
9+
boolean isFulfilled(P primary, ExpectationContext<P> context);
1010

1111
Duration timeout();
1212
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package io.javaoperatorsdk.operator.api.reconciler.expectation;
2+
3+
import java.time.Duration;
4+
import java.util.function.BiPredicate;
5+
6+
import io.fabric8.kubernetes.api.model.HasMetadata;
7+
8+
public class ExpectationAdapter<P extends HasMetadata> extends AbstractExpectation<P> {
9+
10+
private final BiPredicate<P, ExpectationContext<P>> expectation;
11+
12+
public ExpectationAdapter(BiPredicate<P, ExpectationContext<P>> expectation, Duration timeout) {
13+
super(timeout);
14+
this.expectation = expectation;
15+
}
16+
17+
@Override
18+
public boolean isFulfilled(P primary, ExpectationContext<P> context) {
19+
return expectation.test(primary, context);
20+
}
21+
}

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,4 @@
33
import io.fabric8.kubernetes.api.model.HasMetadata;
44
import io.javaoperatorsdk.operator.api.reconciler.CacheAware;
55

6-
public interface ExpectationContext<P extends HasMetadata> extends CacheAware<P> {
7-
8-
}
6+
public interface ExpectationContext<P extends HasMetadata> extends CacheAware<P> {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package io.javaoperatorsdk.operator.api.reconciler.expectation;
2+
3+
public class ExpectationResult {
4+
5+
private ExpectationStatus status;
6+
7+
public ExpectationResult(ExpectationStatus status) {
8+
this.status = status;
9+
}
10+
11+
public ExpectationStatus getStatus() {
12+
return status;
13+
}
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package io.javaoperatorsdk.operator.api.reconciler.expectation;
2+
3+
public enum ExpectationStatus {
4+
TIMEOUT,
5+
FULFILLED;
6+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ private PostExecutionControl<P> createPostExecutionControl(
250250
}
251251

252252
private void updatePostExecutionControlWithReschedule(
253-
PostExecutionControl<P> postExecutionControl, BaseControl<?> baseControl) {
253+
PostExecutionControl<P> postExecutionControl, BaseControl<?, ?> baseControl) {
254254
baseControl.getScheduleDelay().ifPresent(postExecutionControl::withReSchedule);
255255
}
256256

0 commit comments

Comments
 (0)