Skip to content

Commit 042d1e4

Browse files
committed
fix: use finalizer and deletion marker methods from HasMetadata
Fixes #317
1 parent 2db6b5f commit 042d1e4

File tree

5 files changed

+9
-39
lines changed

5 files changed

+9
-39
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/ControllerUtils.java

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

3-
import io.fabric8.kubernetes.client.CustomResource;
43
import io.javaoperatorsdk.operator.api.Controller;
54
import io.javaoperatorsdk.operator.api.ResourceController;
65
import java.util.Locale;
@@ -13,11 +12,6 @@ public static String getDefaultFinalizerName(String crdName) {
1312
return crdName + FINALIZER_NAME_SUFFIX;
1413
}
1514

16-
public static boolean hasGivenFinalizer(CustomResource resource, String finalizer) {
17-
return resource.getMetadata().getFinalizers() != null
18-
&& resource.getMetadata().getFinalizers().contains(finalizer);
19-
}
20-
2115
public static String getNameFor(Class<? extends ResourceController> controllerClass) {
2216
// if the controller annotation has a name attribute, use it
2317
final var annotation = controllerClass.getAnnotation(Controller.class);

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

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,18 @@
33
import static io.javaoperatorsdk.operator.EventListUtils.containsCustomResourceDeletedEvent;
44
import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.getUID;
55
import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.getVersion;
6-
import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.markedForDeletion;
76

87
import io.fabric8.kubernetes.api.model.KubernetesResourceList;
98
import io.fabric8.kubernetes.client.CustomResource;
109
import io.fabric8.kubernetes.client.dsl.MixedOperation;
1110
import io.fabric8.kubernetes.client.dsl.Resource;
12-
import io.javaoperatorsdk.operator.ControllerUtils;
1311
import io.javaoperatorsdk.operator.api.Context;
1412
import io.javaoperatorsdk.operator.api.DefaultContext;
1513
import io.javaoperatorsdk.operator.api.DeleteControl;
1614
import io.javaoperatorsdk.operator.api.ResourceController;
1715
import io.javaoperatorsdk.operator.api.UpdateControl;
1816
import io.javaoperatorsdk.operator.processing.event.EventList;
1917
import io.javaoperatorsdk.operator.processing.event.EventSourceManager;
20-
import java.util.ArrayList;
2118
import org.slf4j.Logger;
2219
import org.slf4j.LoggerFactory;
2320

@@ -65,8 +62,7 @@ private PostExecutionControl handleDispatch(ExecutionScope executionScope) {
6562
getVersion(resource));
6663
return PostExecutionControl.defaultDispatch();
6764
}
68-
if ((markedForDeletion(resource)
69-
&& !ControllerUtils.hasGivenFinalizer(resource, resourceFinalizer))) {
65+
if ((resource.isMarkedForDeletion() && !resource.hasFinalizer(resourceFinalizer))) {
7066
log.debug(
7167
"Skipping event dispatching since its marked for deletion but has no finalizer: {}",
7268
executionScope);
@@ -77,7 +73,7 @@ private PostExecutionControl handleDispatch(ExecutionScope executionScope) {
7773
eventSourceManager,
7874
new EventList(executionScope.getEvents()),
7975
executionScope.getRetryInfo());
80-
if (markedForDeletion(resource)) {
76+
if (resource.isMarkedForDeletion()) {
8177
return handleDelete(resource, context);
8278
} else {
8379
return handleCreateOrUpdate(executionScope, resource, context);
@@ -86,8 +82,7 @@ private PostExecutionControl handleDispatch(ExecutionScope executionScope) {
8682

8783
private PostExecutionControl handleCreateOrUpdate(
8884
ExecutionScope executionScope, CustomResource resource, Context context) {
89-
if (!ControllerUtils.hasGivenFinalizer(resource, resourceFinalizer)
90-
&& !markedForDeletion(resource)) {
85+
if (!resource.hasFinalizer(resourceFinalizer) && !resource.isMarkedForDeletion()) {
9186
/* We always add the finalizer if missing and not marked for deletion.
9287
We execute the controller processing only for processing the event sent as a results
9388
of the finalizer add. This will make sure that the resources are not created before
@@ -133,7 +128,7 @@ private PostExecutionControl handleDelete(CustomResource resource, Context conte
133128
getUID(resource),
134129
getVersion(resource));
135130
DeleteControl deleteControl = controller.deleteResource(resource, context);
136-
boolean hasFinalizer = ControllerUtils.hasGivenFinalizer(resource, resourceFinalizer);
131+
boolean hasFinalizer = resource.hasFinalizer(resourceFinalizer);
137132
if (deleteControl == DeleteControl.DEFAULT_DELETE && hasFinalizer) {
138133
CustomResource customResource = removeFinalizer(resource);
139134
return PostExecutionControl.customResourceUpdated(customResource);
@@ -151,7 +146,7 @@ private PostExecutionControl handleDelete(CustomResource resource, Context conte
151146
private void updateCustomResourceWithFinalizer(CustomResource resource) {
152147
log.debug(
153148
"Adding finalizer for resource: {} version: {}", getUID(resource), getVersion(resource));
154-
addFinalizerIfNotPresent(resource);
149+
resource.addFinalizer(resourceFinalizer);
155150
replace(resource);
156151
}
157152

@@ -166,7 +161,7 @@ private CustomResource removeFinalizer(CustomResource resource) {
166161
"Removing finalizer on resource: {} with version: {}",
167162
getUID(resource),
168163
getVersion(resource));
169-
resource.getMetadata().getFinalizers().remove(resourceFinalizer);
164+
resource.removeFinalizer(resourceFinalizer);
170165
return customResourceFacade.replaceWithLock(resource);
171166
}
172167

@@ -178,17 +173,6 @@ private CustomResource replace(CustomResource resource) {
178173
return customResourceFacade.replaceWithLock(resource);
179174
}
180175

181-
private void addFinalizerIfNotPresent(CustomResource resource) {
182-
if (!ControllerUtils.hasGivenFinalizer(resource, resourceFinalizer)
183-
&& !markedForDeletion(resource)) {
184-
log.info("Adding finalizer to {}", resource.getMetadata());
185-
if (resource.getMetadata().getFinalizers() == null) {
186-
resource.getMetadata().setFinalizers(new ArrayList<>(1));
187-
}
188-
resource.getMetadata().getFinalizers().add(resourceFinalizer);
189-
}
190-
}
191-
192176
// created to support unit testing
193177
public static class CustomResourceFacade<R extends CustomResource> {
194178

Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package io.javaoperatorsdk.operator.processing;
22

33
import io.fabric8.kubernetes.api.model.HasMetadata;
4-
import io.fabric8.kubernetes.client.CustomResource;
54

65
public class KubernetesResourceUtils {
76

@@ -12,9 +11,4 @@ public static String getUID(HasMetadata customResource) {
1211
public static String getVersion(HasMetadata customResource) {
1312
return customResource.getMetadata().getResourceVersion();
1413
}
15-
16-
public static boolean markedForDeletion(CustomResource resource) {
17-
return resource.getMetadata().getDeletionTimestamp() != null
18-
&& !resource.getMetadata().getDeletionTimestamp().isEmpty();
19-
}
2014
}

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@
22

33
import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.getUID;
44
import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.getVersion;
5-
import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.markedForDeletion;
65

76
import io.fabric8.kubernetes.client.CustomResource;
87
import io.fabric8.kubernetes.client.Watcher;
98
import io.fabric8.kubernetes.client.WatcherException;
109
import io.fabric8.kubernetes.client.dsl.MixedOperation;
1110
import io.fabric8.kubernetes.client.dsl.internal.CustomResourceOperationsImpl;
12-
import io.javaoperatorsdk.operator.ControllerUtils;
1311
import io.javaoperatorsdk.operator.processing.CustomResourceCache;
1412
import io.javaoperatorsdk.operator.processing.KubernetesResourceUtils;
1513
import io.javaoperatorsdk.operator.processing.event.AbstractEventSource;
@@ -115,7 +113,7 @@ public void eventReceived(Watcher.Action action, CustomResource customResource)
115113
}
116114

117115
private void markLastGenerationProcessed(CustomResource resource) {
118-
if (generationAware && ControllerUtils.hasGivenFinalizer(resource, resourceFinalizer)) {
116+
if (generationAware && resource.hasFinalizer(resourceFinalizer)) {
119117
lastGenerationProcessedSuccessfully.put(
120118
KubernetesResourceUtils.getUID(resource), resource.getMetadata().getGeneration());
121119
}
@@ -126,7 +124,7 @@ private boolean skipBecauseOfGenerations(CustomResource customResource) {
126124
return false;
127125
}
128126
// if CR being deleted generation is naturally not changing, so we process all the events
129-
if (markedForDeletion(customResource)) {
127+
if (customResource.isMarkedForDeletion()) {
130128
return false;
131129
}
132130
if (!largerGenerationThenProcessedBefore(customResource)) {

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/EventDispatcherTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333

3434
class EventDispatcherTest {
3535

36-
private static final String DEFAULT_FINALIZER = "finalizer";
36+
private static final String DEFAULT_FINALIZER = "javaoperatorsdk.io/finalizer";
3737
private CustomResource testCustomResource;
3838
private EventDispatcher eventDispatcher;
3939
private ResourceController<CustomResource> controller = mock(ResourceController.class);

0 commit comments

Comments
 (0)