Skip to content

fix(migrations): Catch missing historical_silo_assignments on MOVE_TO_PENDING#115087

Merged
wedamija merged 3 commits intomasterfrom
danf/move-to-pending-historical-silo-check
May 7, 2026
Merged

fix(migrations): Catch missing historical_silo_assignments on MOVE_TO_PENDING#115087
wedamija merged 3 commits intomasterfrom
danf/move-to-pending-historical-silo-check

Conversation

@wedamija
Copy link
Copy Markdown
Member

@wedamija wedamija commented May 7, 2026

The historical_silo_assignments check in SafeDeleteModel only fired for DeletionAction.DELETE, with an early return for MOVE_TO_PENDING. That missed the dangerous case where the model class is deleted in the same PR as the MOVE_TO_PENDING migration: once the class is gone, the silo router can no longer resolve the table via the live app registry, and without a historical entry allow_migrate returns False so the migration silently no-ops in prod.

This is what bit us in #114929 (dashboardlastvisited). This caused an error in production where we couldn't delete related rows from OrganizationMember, and this was only fixed when we dropped the table fully in #114930.

This pr makes sure that the test fails if we move a model to pending and don't add the historical routing.

Also update the skill to guide llms to always add this historical entry.

…_PENDING

The historical_silo_assignments check in SafeDeleteModel only fired for
DeletionAction.DELETE, with an early return for MOVE_TO_PENDING. This
missed the dangerous case where the model class is deleted in the same
PR as the MOVE_TO_PENDING migration: once the class is gone, the silo
router can no longer resolve the table via the live app registry, and
without a historical entry allow_migrate returns False so the migration
silently no-ops in prod (see PR #114929 / dashboardlastvisited).

The check now resolves the table for both deletion actions before the
MOVE_TO_PENDING short-circuit. Existing MOVE_TO_PENDING migrations all
have their tables in historical_silo_assignments today so replaying them
from scratch still passes — verified with --create-db.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot added the Scope: Backend Automatically applied to PRs that change backend components label May 7, 2026
@wedamija wedamija marked this pull request as ready for review May 7, 2026 17:44
@wedamija wedamija requested a review from a team as a code owner May 7, 2026 17:44
The is_post_deployment doc block in generated migrations is useful
context for future migration authors and shouldn't be stripped when
editing a generated file.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@wedamija
Copy link
Copy Markdown
Member Author

wedamija commented May 7, 2026

The check in this PR fires for MOVE_TO_PENDING, so the skill no longer
needs the warning that the test won't catch a missing entry — just the
correct procedure.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@wedamija
Copy link
Copy Markdown
Member Author

wedamija commented May 7, 2026

Test PR here: https://github.com/getsentry/sentry/pull/115091/changes

Ok, this now fails if we don't add the historical assignments, should be good to go

@wedamija wedamija enabled auto-merge (squash) May 7, 2026 18:05
@wedamija wedamija merged commit 3146c85 into master May 7, 2026
63 checks passed
@wedamija wedamija deleted the danf/move-to-pending-historical-silo-check branch May 7, 2026 18:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Scope: Backend Automatically applied to PRs that change backend components

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants