Skip to content

Commit b81628c

Browse files
committed
refactor: introduce AbstractExecutionNumberRecordingReconciler
1 parent 39ac4dc commit b81628c

File tree

16 files changed

+104
-224
lines changed

16 files changed

+104
-224
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package io.javaoperatorsdk.operator.sample;
2+
3+
import java.util.concurrent.atomic.AtomicInteger;
4+
5+
import io.fabric8.kubernetes.api.model.HasMetadata;
6+
import io.javaoperatorsdk.operator.api.reconciler.Context;
7+
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
8+
import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
9+
import io.javaoperatorsdk.operator.support.TestExecutionInfoProvider;
10+
11+
public abstract class AbstractExecutionNumberRecordingReconciler<P extends HasMetadata> implements
12+
Reconciler<P>, TestExecutionInfoProvider {
13+
14+
private final AtomicInteger numberOfReconcileExecutions = new AtomicInteger(0);
15+
16+
protected int recordReconcileExecution() {
17+
return numberOfReconcileExecutions.incrementAndGet();
18+
}
19+
20+
public int getNumberOfExecutions() {
21+
return numberOfReconcileExecutions.get();
22+
}
23+
24+
@Override
25+
public UpdateControl<P> reconcile(P resource, Context<P> context) throws Exception {
26+
recordReconcileExecution();
27+
return UpdateControl.noUpdate();
28+
}
29+
}

operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/cleanerforreconciler/CleanerForReconcilerTestReconciler.java

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,19 @@
22

33
import java.util.concurrent.atomic.AtomicInteger;
44

5-
import io.javaoperatorsdk.operator.api.reconciler.*;
6-
import io.javaoperatorsdk.operator.support.TestExecutionInfoProvider;
5+
import io.javaoperatorsdk.operator.api.reconciler.Cleaner;
6+
import io.javaoperatorsdk.operator.api.reconciler.Context;
7+
import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
8+
import io.javaoperatorsdk.operator.api.reconciler.DeleteControl;
9+
import io.javaoperatorsdk.operator.sample.AbstractExecutionNumberRecordingReconciler;
710

811
@ControllerConfiguration
912
public class CleanerForReconcilerTestReconciler
10-
implements Reconciler<CleanerForReconcilerCustomResource>,
11-
Cleaner<CleanerForReconcilerCustomResource>,
12-
TestExecutionInfoProvider {
13+
extends AbstractExecutionNumberRecordingReconciler<CleanerForReconcilerCustomResource>
14+
implements Cleaner<CleanerForReconcilerCustomResource> {
1315

14-
private final AtomicInteger numberOfExecutions = new AtomicInteger(0);
1516
private final AtomicInteger numberOfCleanupExecutions = new AtomicInteger(0);
1617

17-
@Override
18-
public UpdateControl<CleanerForReconcilerCustomResource> reconcile(
19-
CleanerForReconcilerCustomResource resource,
20-
Context<CleanerForReconcilerCustomResource> context) {
21-
numberOfExecutions.addAndGet(1);
22-
return UpdateControl.noUpdate();
23-
}
24-
25-
public int getNumberOfExecutions() {
26-
return numberOfExecutions.get();
27-
}
28-
2918
public int getNumberOfCleanupExecutions() {
3019
return numberOfCleanupExecutions.get();
3120
}
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,10 @@
11
package io.javaoperatorsdk.operator.sample.cleanermanageddependent;
22

3-
import java.util.concurrent.atomic.AtomicInteger;
4-
5-
import io.javaoperatorsdk.operator.api.reconciler.*;
3+
import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
64
import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent;
7-
import io.javaoperatorsdk.operator.support.TestExecutionInfoProvider;
5+
import io.javaoperatorsdk.operator.sample.AbstractExecutionNumberRecordingReconciler;
86

97
@ControllerConfiguration(dependents = {@Dependent(type = ConfigMapDependentResource.class)})
108
public class CleanerForManagedDependentTestReconciler
11-
implements Reconciler<CleanerForManagedDependentCustomResource>,
12-
TestExecutionInfoProvider {
13-
14-
private final AtomicInteger numberOfExecutions = new AtomicInteger(0);
15-
16-
@Override
17-
public UpdateControl<CleanerForManagedDependentCustomResource> reconcile(
18-
CleanerForManagedDependentCustomResource resource,
19-
Context<CleanerForManagedDependentCustomResource> context) {
20-
numberOfExecutions.addAndGet(1);
21-
return UpdateControl.noUpdate();
22-
}
23-
24-
public int getNumberOfExecutions() {
25-
return numberOfExecutions.get();
26-
}
27-
9+
extends AbstractExecutionNumberRecordingReconciler<CleanerForManagedDependentCustomResource> {
2810
}
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,9 @@
11
package io.javaoperatorsdk.operator.sample.customfilter;
22

3-
import java.util.concurrent.atomic.AtomicInteger;
4-
5-
import io.javaoperatorsdk.operator.api.reconciler.Context;
63
import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
7-
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
8-
import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
4+
import io.javaoperatorsdk.operator.sample.AbstractExecutionNumberRecordingReconciler;
95

106
@ControllerConfiguration(eventFilters = {CustomFlagFilter.class, CustomFlagFilter2.class})
11-
public class CustomFilteringTestReconciler implements Reconciler<CustomFilteringTestResource> {
12-
13-
private final AtomicInteger numberOfExecutions = new AtomicInteger(0);
14-
15-
@Override
16-
public UpdateControl<CustomFilteringTestResource> reconcile(CustomFilteringTestResource resource,
17-
Context<CustomFilteringTestResource> context) {
18-
numberOfExecutions.incrementAndGet();
19-
return UpdateControl.noUpdate();
20-
}
21-
22-
public int getNumberOfExecutions() {
23-
return numberOfExecutions.get();
24-
}
7+
public class CustomFilteringTestReconciler extends
8+
AbstractExecutionNumberRecordingReconciler<CustomFilteringTestResource> {
259
}
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,16 @@
11
package io.javaoperatorsdk.operator.sample.dependentoperationeventfiltering;
22

3-
import java.util.concurrent.atomic.AtomicInteger;
4-
5-
import io.javaoperatorsdk.operator.api.reconciler.*;
3+
import io.javaoperatorsdk.operator.api.reconciler.Constants;
4+
import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
65
import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent;
7-
import io.javaoperatorsdk.operator.support.TestExecutionInfoProvider;
6+
import io.javaoperatorsdk.operator.sample.AbstractExecutionNumberRecordingReconciler;
87

98
@ControllerConfiguration(
109
namespaces = Constants.WATCH_CURRENT_NAMESPACE,
1110
dependents = {
1211
@Dependent(type = ConfigMapDependentResource.class),
1312
})
1413
public class DependentOperationEventFilterCustomResourceTestReconciler
15-
implements Reconciler<DependentOperationEventFilterCustomResource>,
16-
TestExecutionInfoProvider {
17-
18-
private final AtomicInteger numberOfExecutions = new AtomicInteger(0);
19-
20-
@Override
21-
public UpdateControl<DependentOperationEventFilterCustomResource> reconcile(
22-
DependentOperationEventFilterCustomResource resource,
23-
Context<DependentOperationEventFilterCustomResource> context) {
24-
numberOfExecutions.addAndGet(1);
25-
return UpdateControl.noUpdate();
26-
}
27-
28-
public int getNumberOfExecutions() {
29-
return numberOfExecutions.get();
30-
}
31-
14+
extends
15+
AbstractExecutionNumberRecordingReconciler<DependentOperationEventFilterCustomResource> {
3216
}
Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package io.javaoperatorsdk.operator.sample.deployment;
22

33
import java.util.ArrayList;
4-
import java.util.concurrent.atomic.AtomicInteger;
54

65
import org.slf4j.Logger;
76
import org.slf4j.LoggerFactory;
@@ -11,25 +10,23 @@
1110
import io.fabric8.kubernetes.api.model.apps.DeploymentStatus;
1211
import io.javaoperatorsdk.operator.api.reconciler.Context;
1312
import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
14-
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
1513
import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
16-
import io.javaoperatorsdk.operator.support.TestExecutionInfoProvider;
14+
import io.javaoperatorsdk.operator.sample.AbstractExecutionNumberRecordingReconciler;
1715

1816
@ControllerConfiguration(labelSelector = "test=KubernetesResourceStatusUpdateIT")
1917
public class DeploymentReconciler
20-
implements Reconciler<Deployment>, TestExecutionInfoProvider {
18+
extends AbstractExecutionNumberRecordingReconciler<Deployment> {
2119

2220
public static final String STATUS_MESSAGE = "Reconciled by DeploymentReconciler";
2321

2422
private static final Logger log = LoggerFactory.getLogger(DeploymentReconciler.class);
25-
private final AtomicInteger numberOfExecutions = new AtomicInteger(0);
2623

2724
@Override
2825
public UpdateControl<Deployment> reconcile(
2926
Deployment resource, Context<Deployment> context) {
3027

3128
log.info("Reconcile deployment: {}", resource);
32-
numberOfExecutions.incrementAndGet();
29+
recordReconcileExecution();
3330
if (resource.getStatus() == null) {
3431
resource.setStatus(new DeploymentStatus());
3532
}
@@ -47,10 +44,4 @@ public UpdateControl<Deployment> reconcile(
4744
return UpdateControl.noUpdate();
4845
}
4946
}
50-
51-
52-
@Override
53-
public int getNumberOfExecutions() {
54-
return numberOfExecutions.get();
55-
}
5647
}

operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/doubleupdate/DoubleUpdateTestCustomReconciler.java

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,28 @@
11
package io.javaoperatorsdk.operator.sample.doubleupdate;
22

33
import java.util.HashMap;
4-
import java.util.concurrent.atomic.AtomicInteger;
54

65
import org.slf4j.Logger;
76
import org.slf4j.LoggerFactory;
87

98
import io.javaoperatorsdk.operator.api.reconciler.Context;
109
import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
11-
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
1210
import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
13-
import io.javaoperatorsdk.operator.support.TestExecutionInfoProvider;
11+
import io.javaoperatorsdk.operator.sample.AbstractExecutionNumberRecordingReconciler;
1412

1513
@ControllerConfiguration
1614
public class DoubleUpdateTestCustomReconciler
17-
implements Reconciler<DoubleUpdateTestCustomResource>, TestExecutionInfoProvider {
15+
extends AbstractExecutionNumberRecordingReconciler<DoubleUpdateTestCustomResource> {
1816

1917
private static final Logger log =
2018
LoggerFactory.getLogger(DoubleUpdateTestCustomReconciler.class);
2119
public static final String TEST_ANNOTATION = "TestAnnotation";
2220
public static final String TEST_ANNOTATION_VALUE = "TestAnnotationValue";
23-
private final AtomicInteger numberOfExecutions = new AtomicInteger(0);
2421

2522
@Override
2623
public UpdateControl<DoubleUpdateTestCustomResource> reconcile(
2724
DoubleUpdateTestCustomResource resource, Context<DoubleUpdateTestCustomResource> context) {
28-
numberOfExecutions.addAndGet(1);
25+
recordReconcileExecution();
2926

3027
log.info("Value: " + resource.getSpec().getValue());
3128

@@ -44,8 +41,4 @@ private void ensureStatusExists(DoubleUpdateTestCustomResource resource) {
4441
resource.setStatus(status);
4542
}
4643
}
47-
48-
public int getNumberOfExecutions() {
49-
return numberOfExecutions.get();
50-
}
5144
}

operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/errorstatushandler/ErrorStatusHandlerTestReconciler.java

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,28 @@
11
package io.javaoperatorsdk.operator.sample.errorstatushandler;
22

3-
import java.util.concurrent.atomic.AtomicInteger;
4-
53
import org.slf4j.Logger;
64
import org.slf4j.LoggerFactory;
75

8-
import io.javaoperatorsdk.operator.api.reconciler.*;
9-
import io.javaoperatorsdk.operator.support.TestExecutionInfoProvider;
6+
import io.javaoperatorsdk.operator.api.reconciler.Context;
7+
import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
8+
import io.javaoperatorsdk.operator.api.reconciler.ErrorStatusHandler;
9+
import io.javaoperatorsdk.operator.api.reconciler.ErrorStatusUpdateControl;
10+
import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
11+
import io.javaoperatorsdk.operator.sample.AbstractExecutionNumberRecordingReconciler;
1012

1113
@ControllerConfiguration
1214
public class ErrorStatusHandlerTestReconciler
13-
implements Reconciler<ErrorStatusHandlerTestCustomResource>, TestExecutionInfoProvider,
14-
ErrorStatusHandler<ErrorStatusHandlerTestCustomResource> {
15+
extends AbstractExecutionNumberRecordingReconciler<ErrorStatusHandlerTestCustomResource>
16+
implements ErrorStatusHandler<ErrorStatusHandlerTestCustomResource> {
1517

1618
private static final Logger log = LoggerFactory.getLogger(ErrorStatusHandlerTestReconciler.class);
17-
private final AtomicInteger numberOfExecutions = new AtomicInteger(0);
1819
public static final String ERROR_STATUS_MESSAGE = "Error Retries Exceeded";
1920

2021
@Override
2122
public UpdateControl<ErrorStatusHandlerTestCustomResource> reconcile(
2223
ErrorStatusHandlerTestCustomResource resource,
2324
Context<ErrorStatusHandlerTestCustomResource> context) {
24-
var number = numberOfExecutions.addAndGet(1);
25+
var number = recordReconcileExecution();
2526
var retryAttempt = -1;
2627
if (context.getRetryInfo().isPresent()) {
2728
retryAttempt = context.getRetryInfo().get().getAttemptCount();
@@ -39,10 +40,6 @@ private void ensureStatusExists(ErrorStatusHandlerTestCustomResource resource) {
3940
}
4041
}
4142

42-
public int getNumberOfExecutions() {
43-
return numberOfExecutions.get();
44-
}
45-
4643
@Override
4744
public ErrorStatusUpdateControl<ErrorStatusHandlerTestCustomResource> updateErrorStatus(
4845
ErrorStatusHandlerTestCustomResource resource,
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,21 @@
11
package io.javaoperatorsdk.operator.sample.event;
22

3-
import java.util.concurrent.atomic.AtomicInteger;
4-
5-
import io.javaoperatorsdk.operator.api.reconciler.*;
3+
import io.javaoperatorsdk.operator.api.reconciler.Context;
64
import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
7-
import io.javaoperatorsdk.operator.support.TestExecutionInfoProvider;
5+
import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
6+
import io.javaoperatorsdk.operator.sample.AbstractExecutionNumberRecordingReconciler;
87

98
@ControllerConfiguration
109
public class EventSourceTestCustomReconciler
11-
implements Reconciler<EventSourceTestCustomResource>,
12-
TestExecutionInfoProvider {
10+
extends AbstractExecutionNumberRecordingReconciler<EventSourceTestCustomResource> {
1311

1412
public static final int TIMER_PERIOD = 500;
15-
private final AtomicInteger numberOfExecutions = new AtomicInteger(0);
1613

1714
@Override
1815
public UpdateControl<EventSourceTestCustomResource> reconcile(
1916
EventSourceTestCustomResource resource, Context<EventSourceTestCustomResource> context) {
2017

21-
numberOfExecutions.addAndGet(1);
18+
recordReconcileExecution();
2219
ensureStatusExists(resource);
2320
resource.getStatus().setState(EventSourceTestCustomResourceStatus.State.SUCCESS);
2421

@@ -32,8 +29,4 @@ private void ensureStatusExists(EventSourceTestCustomResource resource) {
3229
resource.setStatus(status);
3330
}
3431
}
35-
36-
public int getNumberOfExecutions() {
37-
return numberOfExecutions.get();
38-
}
3932
}
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,13 @@
11
package io.javaoperatorsdk.operator.sample.maxinterval;
22

33
import java.util.concurrent.TimeUnit;
4-
import java.util.concurrent.atomic.AtomicInteger;
54

6-
import io.javaoperatorsdk.operator.api.reconciler.*;
7-
import io.javaoperatorsdk.operator.support.TestExecutionInfoProvider;
5+
import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
6+
import io.javaoperatorsdk.operator.api.reconciler.ReconciliationMaxInterval;
7+
import io.javaoperatorsdk.operator.sample.AbstractExecutionNumberRecordingReconciler;
88

99
@ControllerConfiguration(reconciliationMaxInterval = @ReconciliationMaxInterval(interval = 50,
1010
timeUnit = TimeUnit.MILLISECONDS))
1111
public class MaxIntervalTestReconciler
12-
implements Reconciler<MaxIntervalTestCustomResource>, TestExecutionInfoProvider {
13-
14-
private final AtomicInteger numberOfExecutions = new AtomicInteger(0);
15-
16-
@Override
17-
public UpdateControl<MaxIntervalTestCustomResource> reconcile(
18-
MaxIntervalTestCustomResource resource, Context<MaxIntervalTestCustomResource> context) {
19-
numberOfExecutions.addAndGet(1);
20-
return UpdateControl.noUpdate();
21-
}
22-
23-
public int getNumberOfExecutions() {
24-
return numberOfExecutions.get();
25-
}
26-
12+
extends AbstractExecutionNumberRecordingReconciler<MaxIntervalTestCustomResource> {
2713
}

0 commit comments

Comments
 (0)