Skip to content

Commit d2f24a4

Browse files
author
Bram Meerten
committed
feat: Make @configured, @GradualRetry and @ratelimited Inherited (operator-framework#2091)
1 parent 9701907 commit d2f24a4

File tree

5 files changed

+43
-11
lines changed

5 files changed

+43
-11
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/dependent/Configured.java

+2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package io.javaoperatorsdk.operator.api.config.dependent;
22

33
import java.lang.annotation.Annotation;
4+
import java.lang.annotation.Inherited;
45
import java.lang.annotation.Retention;
56
import java.lang.annotation.RetentionPolicy;
67

8+
@Inherited
79
@Retention(RetentionPolicy.RUNTIME)
810
public @interface Configured {
911

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/dependent/DependentResourceConfigurationResolver.java

+2-11
Original file line numberDiff line numberDiff line change
@@ -84,17 +84,8 @@ public static <C extends ControllerConfiguration<? extends HasMetadata>> Object
8484
private static ConfiguredClassPair getConfigured(
8585
Class<? extends DependentResource> dependentResourceClass) {
8686
Class<? extends DependentResource> currentClass = dependentResourceClass;
87-
Configured configured;
88-
ConfiguredClassPair result = null;
89-
while (DependentResource.class.isAssignableFrom(currentClass)) {
90-
configured = currentClass.getAnnotation(Configured.class);
91-
if (configured != null) {
92-
result = new ConfiguredClassPair(configured, currentClass);
93-
break;
94-
}
95-
currentClass = (Class<? extends DependentResource>) currentClass.getSuperclass();
96-
}
97-
return result;
87+
Configured configured = dependentResourceClass.getAnnotation(Configured.class);
88+
return configured != null ? new ConfiguredClassPair(configured, currentClass) : null;
9889
}
9990

10091
private static <C extends ControllerConfiguration<? extends HasMetadata>> ConverterAnnotationPair getOrCreateConverter(

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

+2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package io.javaoperatorsdk.operator.processing.event.rate;
22

33
import java.lang.annotation.ElementType;
4+
import java.lang.annotation.Inherited;
45
import java.lang.annotation.Retention;
56
import java.lang.annotation.RetentionPolicy;
67
import java.lang.annotation.Target;
78
import java.util.concurrent.TimeUnit;
89

10+
@Inherited
911
@Retention(RetentionPolicy.RUNTIME)
1012
@Target({ElementType.TYPE})
1113
public @interface RateLimited {

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/retry/GradualRetry.java

+2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package io.javaoperatorsdk.operator.processing.retry;
22

33
import java.lang.annotation.ElementType;
4+
import java.lang.annotation.Inherited;
45
import java.lang.annotation.Retention;
56
import java.lang.annotation.RetentionPolicy;
67
import java.lang.annotation.Target;
78

9+
@Inherited
810
@Retention(RetentionPolicy.RUNTIME)
911
@Target(ElementType.TYPE)
1012
public @interface GradualRetry {

operator-framework/src/test/java/io/javaoperatorsdk/operator/config/BaseConfigurationServiceTest.java

+35
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,18 @@ void configuringRateAndRetryViaAnnotationsShouldWork() {
190190
assertEquals(Duration.ofSeconds(3), rateLimiter.getRefreshPeriod());
191191
}
192192

193+
@Test
194+
void configuringRateLimitAndGradualRetryViaSuperClassShouldWork() {
195+
var config = configFor(new GradualRetryAndRateLimitedOnSuperClass());
196+
final var retry = config.getRetry();
197+
final var testRetry = assertInstanceOf(GenericRetry.class, retry);
198+
assertEquals(BaseClassWithGradualRetryAndRateLimited.RETRY_MAX_ATTEMPTS, testRetry.getMaxAttempts());
199+
200+
final var rateLimiter = assertInstanceOf(LinearRateLimiter.class, config.getRateLimiter());
201+
assertEquals(BaseClassWithGradualRetryAndRateLimited.RATE_LIMITED_MAX_RECONCILIATIONS, rateLimiter.getLimitForPeriod());
202+
assertEquals(Duration.ofSeconds(BaseClassWithGradualRetryAndRateLimited.RATE_LIMITED_WITHIN_SECONDS), rateLimiter.getRefreshPeriod());
203+
}
204+
193205
@Test
194206
void checkingRetryingGraduallyWorks() {
195207
var config = configFor(new CheckRetryingGraduallyConfiguration());
@@ -382,6 +394,29 @@ public UpdateControl<ConfigMap> reconcile(ConfigMap resource, Context<ConfigMap>
382394
}
383395
}
384396

397+
@ControllerConfiguration
398+
private static class GradualRetryAndRateLimitedOnSuperClass
399+
extends BaseClassWithGradualRetryAndRateLimited
400+
implements Reconciler<ConfigMap> {
401+
402+
@Override
403+
public UpdateControl<ConfigMap> reconcile(ConfigMap resource, Context<ConfigMap> context) throws Exception {
404+
return null;
405+
}
406+
}
407+
408+
@RateLimited(
409+
maxReconciliations = BaseClassWithGradualRetryAndRateLimited.RATE_LIMITED_MAX_RECONCILIATIONS,
410+
within = BaseClassWithGradualRetryAndRateLimited.RATE_LIMITED_WITHIN_SECONDS
411+
)
412+
@GradualRetry(maxAttempts = BaseClassWithGradualRetryAndRateLimited.RETRY_MAX_ATTEMPTS)
413+
private static class BaseClassWithGradualRetryAndRateLimited {
414+
415+
public static final int RATE_LIMITED_MAX_RECONCILIATIONS = 7;
416+
public static final int RATE_LIMITED_WITHIN_SECONDS = 3;
417+
public static final int RETRY_MAX_ATTEMPTS = 3;
418+
}
419+
385420
private static class ControllerConfigurationOnSuperClass extends BaseClass {
386421
}
387422

0 commit comments

Comments
 (0)