ref(dashboards): Remove DashboardLastVisited model#114929
Merged
Conversation
Contributor
|
This PR has a migration; here is the generated SQL for for --
-- Alter field dashboard on dashboardlastvisited
--
SET CONSTRAINTS "sentry_dashboardlast_dashboard_id_31d3a51b_fk_sentry_da" IMMEDIATE; ALTER TABLE "sentry_dashboardlastvisited" DROP CONSTRAINT "sentry_dashboardlast_dashboard_id_31d3a51b_fk_sentry_da";
--
-- Alter field member on dashboardlastvisited
--
SET CONSTRAINTS "sentry_dashboardlast_member_id_28801a0a_fk_sentry_or" IMMEDIATE; ALTER TABLE "sentry_dashboardlastvisited" DROP CONSTRAINT "sentry_dashboardlast_member_id_28801a0a_fk_sentry_or";
--
-- Moved model DashboardLastVisited to pending deletion state
--
-- (no-op) |
narsaynorath
approved these changes
May 6, 2026
The DashboardLastVisited model was added to back per-user "recently viewed" sorting and per-user last_visited reads gated on organizations:dashboards-starred-reordering. That flag was removed (#114817), the writes were removed in the same PR's follow-up, so the model has no remaining readers or writers in product code. This PR removes the model class, all code references (testutils backups, backup comparators), and adds a MOVE_TO_PENDING migration that drops the FK constraints and removes the model from Django's migration state. The table is preserved for rolling deploy safety; a follow-up PR drops it. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
d61c627 to
2f09628
Compare
Contributor
|
This PR has a migration; here is the generated SQL for for --
-- Alter field dashboard on dashboardlastvisited
--
SET CONSTRAINTS "sentry_dashboardlast_dashboard_id_31d3a51b_fk_sentry_da" IMMEDIATE; ALTER TABLE "sentry_dashboardlastvisited" DROP CONSTRAINT "sentry_dashboardlast_dashboard_id_31d3a51b_fk_sentry_da";
--
-- Alter field member on dashboardlastvisited
--
SET CONSTRAINTS "sentry_dashboardlast_member_id_28801a0a_fk_sentry_or" IMMEDIATE; ALTER TABLE "sentry_dashboardlastvisited" DROP CONSTRAINT "sentry_dashboardlast_member_id_28801a0a_fk_sentry_or";
--
-- Moved model DashboardLastVisited to pending deletion state
--
-- (no-op) |
wedamija
added a commit
that referenced
this pull request
May 7, 2026
…_PENDING (#115087) 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. --------- Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
constantinius
pushed a commit
that referenced
this pull request
May 8, 2026
…_PENDING (#115087) 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. --------- Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
The DashboardLastVisited model was added to back per-user "recently viewed" sorting and per-user last_visited reads gated on organizations:dashboards-starred-reordering. That flag was removed (#114817), the writes were removed in the same PR's follow-up, so the model has no remaining readers or writers in product code.
This PR removes the model class, all code references (testutils backups, backup comparators), and adds a MOVE_TO_PENDING migration that drops the FK constraints and removes the model from Django's migration state. The table is preserved for rolling deploy safety; a follow-up PR drops it.