fix: delete TopologyServiceApplication rows before services to prevent FK violation #5592
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.
Summary
Fixes #5439
When refreshing topology data from a provider (e.g., ArgoCD, Cilium), the
process_topologyfunction deletes existingTopologyServiceDependencyandTopologyServicerecords before creating new ones. However, it does not deleteTopologyServiceApplicationrows that reference the services being deleted.Since
TopologyServiceApplication.service_idhas a foreign key toTopologyService.idwithoutondelete=CASCADE, the deletion ofTopologyServicerecords fails with:Changes
Query service IDs first — collect all
TopologyService.idvalues for the provider before deleting anything, so we can useINclauses for targeted cleanup.Delete
TopologyServiceApplicationrows — remove the service-application associations before deleting the services themselves.Delete dependencies by ID — use the pre-collected service IDs with
INinstead of the previous subquery throughhas(), which is both more explicit and avoids the need for the relationship-based filter. Also deletes reverse dependencies (where the service is thedepends_on_service_idtarget).Delete services by ID — use the same pre-collected IDs for consistency.
Test Plan
Assisted by Claude Opus 4.6 max thinking
Made with Cursor