Skip to content

Commit a6bfe4c

Browse files
committed
fix: propagate event when resource is marked for deletion
1 parent 257497d commit a6bfe4c

2 files changed

Lines changed: 20 additions & 2 deletions

File tree

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ class EventFilterDetails {
2727
private int activeUpdates = 0;
2828
private ResourceEvent lastEvent;
2929
private String lastOwnUpdatedResourceVersion;
30+
private boolean becameMarkedForDeletion = false;
3031

3132
public void increaseActiveUpdates() {
3233
activeUpdates = activeUpdates + 1;
@@ -56,7 +57,8 @@ public void setLastEvent(ResourceEvent event) {
5657

5758
public Optional<ResourceEvent> getLatestEventAfterLastUpdateEvent() {
5859
if (lastEvent != null
59-
&& (lastOwnUpdatedResourceVersion == null
60+
&& (becameMarkedForDeletion
61+
|| lastOwnUpdatedResourceVersion == null
6062
|| ReconcilerUtilsInternal.compareResourceVersions(
6163
lastEvent.getResource().orElseThrow().getMetadata().getResourceVersion(),
6264
lastOwnUpdatedResourceVersion)
@@ -69,4 +71,8 @@ public Optional<ResourceEvent> getLatestEventAfterLastUpdateEvent() {
6971
public int getActiveUpdates() {
7072
return activeUpdates;
7173
}
74+
75+
public void setBecameMarkedForDeletion(boolean becameMarkedForDeletion) {
76+
this.becameMarkedForDeletion = becameMarkedForDeletion;
77+
}
7278
}

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,9 @@ private synchronized EventHandling onEvent(
132132
}
133133
var cached = cache.get(resourceId);
134134
EventHandling result = EventHandling.NEW;
135+
// todo do this just for the primary resource?
136+
boolean becameMarkedForDeletion =
137+
resourceBecameMarkedForDeletion(prevResourceVersion, resource);
135138
if (cached != null) {
136139
int comp = ReconcilerUtilsInternal.compareResourceVersions(resource, cached);
137140
if (comp >= 0 || unknownState) {
@@ -155,9 +158,12 @@ private synchronized EventHandling onEvent(
155158
delete
156159
? new ResourceDeleteEvent(ResourceAction.DELETED, resourceId, resource, unknownState)
157160
: new ExtendedResourceEvent(action, resourceId, resource, prevResourceVersion));
161+
if (becameMarkedForDeletion) {
162+
ed.setBecameMarkedForDeletion(true);
163+
}
158164
return EventHandling.DEFER;
159165
} else {
160-
return result;
166+
return becameMarkedForDeletion ? EventHandling.NEW : result;
161167
}
162168
}
163169

@@ -274,4 +280,10 @@ synchronized boolean isEmpty() {
274280
synchronized Map<ResourceID, T> getResources() {
275281
return Collections.unmodifiableMap(cache);
276282
}
283+
284+
private boolean resourceBecameMarkedForDeletion(T prevResource, T newResource) {
285+
return prevResource != null
286+
&& !prevResource.isMarkedForDeletion()
287+
&& newResource.isMarkedForDeletion();
288+
}
277289
}

0 commit comments

Comments
 (0)