Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ class EventFilterDetails {
private int activeUpdates = 0;
private ResourceEvent lastEvent;
private String lastOwnUpdatedResourceVersion;
private boolean becameMarkedForDeletion = false;

public void increaseActiveUpdates() {
activeUpdates = activeUpdates + 1;
Expand Down Expand Up @@ -56,7 +57,8 @@ public void setLastEvent(ResourceEvent event) {

public Optional<ResourceEvent> getLatestEventAfterLastUpdateEvent() {
if (lastEvent != null
&& (lastOwnUpdatedResourceVersion == null
&& (becameMarkedForDeletion
|| lastOwnUpdatedResourceVersion == null
|| ReconcilerUtilsInternal.compareResourceVersions(
lastEvent.getResource().orElseThrow().getMetadata().getResourceVersion(),
lastOwnUpdatedResourceVersion)
Expand All @@ -69,4 +71,8 @@ public Optional<ResourceEvent> getLatestEventAfterLastUpdateEvent() {
public int getActiveUpdates() {
return activeUpdates;
}

public void setBecameMarkedForDeletion(boolean becameMarkedForDeletion) {
this.becameMarkedForDeletion = becameMarkedForDeletion;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,9 @@ private synchronized EventHandling onEvent(
}
var cached = cache.get(resourceId);
EventHandling result = EventHandling.NEW;
// todo do this just for the primary resource?
boolean becameMarkedForDeletion =
resourceBecameMarkedForDeletion(prevResourceVersion, resource);
if (cached != null) {
int comp = ReconcilerUtilsInternal.compareResourceVersions(resource, cached);
if (comp >= 0 || unknownState) {
Expand All @@ -155,9 +158,12 @@ private synchronized EventHandling onEvent(
delete
? new ResourceDeleteEvent(ResourceAction.DELETED, resourceId, resource, unknownState)
: new ExtendedResourceEvent(action, resourceId, resource, prevResourceVersion));
if (becameMarkedForDeletion) {
ed.setBecameMarkedForDeletion(true);
}
return EventHandling.DEFER;
} else {
return result;
return becameMarkedForDeletion ? EventHandling.NEW : result;
}
}

Expand Down Expand Up @@ -274,4 +280,10 @@ synchronized boolean isEmpty() {
synchronized Map<ResourceID, T> getResources() {
return Collections.unmodifiableMap(cache);
}

private boolean resourceBecameMarkedForDeletion(T prevResource, T newResource) {
return prevResource != null
&& !prevResource.isMarkedForDeletion()
&& newResource.isMarkedForDeletion();
}
}
Loading