KB-13 Suspected, not reproduced
A pruned object can come back in the ReleaseInventory as a health-only entry
Behavior#
The health loop reads the ReleaseInventory from its cache and reads the live objects. Then it
writes the health fields of all entries with Server-Side Apply. The controller can remove an
entry between the read and the write. In that case, the health write creates the entry again,
with only the key and the health fields.
Effect#
The entry has no renderRef. The controller does not own it, so it cannot remove it. Healthy
can stay Pending, and a rollout can stay Progressing.
Workaround#
None known.
Fix direction#
Write health only for entries that still exist, for example with a conditional update.
In the code
convoy v0.9.0
internal/observer.(*HealthController).writeInventoryHealthinternal/observer/inventoryhealth.go:69internal/inventory.(*apiStore).Putinternal/inventory/apistore.go:95