Prevent recreating virtual cluster resource during delete #2241
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What issue type does this pull request address? (keep at least one, remove the others)
/kind bugfix
What does this pull request do? Which issues does it resolve? (use
resolves #<issue_number>
if possible)resolves ENG-4924
Please provide a short message that should be published in the vcluster release notes
Fixed an issue where the vcluster syncer would mistakenly re-create a resource when reconciling the update event that adds the
deletionTimestamp
What else do we need to know?
Scenario
The syncer incorrectly re-creates a resource while it's being deleted. The sequence of events observed:
terminationGracePeriod
== 0 is deleted and its pods are garbage collectedSyncToVirtual()
, which mistakenly re-creates the resource.This scenario occurs more frequently with pods, but the solution has been made generic in case it occurs with different resource kinds.
Solution
Add a
PendingDelete
event type to communicate that an update event occurred to a virtual resource being deleted. If theSyncToVirtual
flow is reached by an event where the source ==Virtual
and the type ==PendingDelete
, then skip calling SyncToVirtual.