johannes-engler-mw commented on PR #2834: URL: https://github.com/apache/apisix-ingress-controller/pull/2834#issuecomment-5505382734
Both done, pushed. **Guard** (`efb5269b`): `ParseRouteParentRefs` now reports whether any parentRef was left unresolved, and the five reconcilers skip the delete in that case. Only the `controllerName` mismatch reaches `Provider.Delete`; Gateway/GatewayClass `NotFound` leaves the data plane alone. **syncNotify** (`7580d05d`): `Client.DeleteConfig` returns the `StoreDelta` it already computed and `apisixProvider.Delete` gates `syncNotify` on `len(delta.Deleted) > 0`. Single production caller, so no other call sites moved. One thing worth recording from writing the e2e: **the GatewayClass case is narrower than we both assumed.** `gatewayclass_controller.go:89` holds `apisix.apache.org/gc-protection` for as long as any Gateway references the class, requeueing every 5s with a `DeletionBlocked` event. So a prune or an accidental `kubectl delete` only marks it `Terminating` — it stays readable and the lookup still resolves. Reaching the empty list needs CRD removal, a restore, or the finalizer being dropped. `Gateway` `NotFound` has no such protection, and neither does an informer cache miss, so the guard still earns its place — the outage window is just smaller than "any GitOps prune". Tests: unit coverage for both branches of the walk and for the reconciler decision, plus an e2e that drops the finalizer to produce the real state (class gone, Gateway alive). Verified on kind: passes with the guard, 404 two seconds into the assertion window without it. No `For()` predicate here, per your point that it cannot cover the map-func enqueues. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
