From 6216aef77f29db83de3e67712928099e188b5b48 Mon Sep 17 00:00:00 2001 From: Mark Story Date: Mon, 24 Nov 2025 14:52:39 -0500 Subject: [PATCH 1/3] feat(cells) Add date_updated to organizationmapping v2 Redo this change as it was reverted due to gaps in the control silo deployment pipeline that didn't run migrations. This migration will have run in development environment, and once the control silo migration pipeline is fixed, I'll get a new migration number and use a `SeparateDatabaseAndState` migration to handle this scenario. Reapply "feat(cells) Add date_updated to organizationmapping (#103772)" This reverts commit 94e744ce912f8872abd60d29663a51c9a1c5347f. Refs INFRENG-172 --- ...add_date_updated_to_organizationmapping.py | 39 +++++++++++++++++++ src/sentry/models/organizationmapping.py | 3 ++ 2 files changed, 42 insertions(+) create mode 100644 src/sentry/migrations/1008_add_date_updated_to_organizationmapping.py diff --git a/src/sentry/migrations/1008_add_date_updated_to_organizationmapping.py b/src/sentry/migrations/1008_add_date_updated_to_organizationmapping.py new file mode 100644 index 00000000000000..94113e998b9ab0 --- /dev/null +++ b/src/sentry/migrations/1008_add_date_updated_to_organizationmapping.py @@ -0,0 +1,39 @@ +# Generated by Django 5.2.8 on 2025-11-20 21:13 + +import django.db.models.functions +import django.utils.timezone +from django.db import migrations, models + +from sentry.new_migrations.migrations import CheckedMigration + + +class Migration(CheckedMigration): + # This flag is used to mark that a migration shouldn't be automatically run in production. + # This should only be used for operations where it's safe to run the migration after your + # code has deployed. So this should not be used for most operations that alter the schema + # of a table. + # Here are some things that make sense to mark as post deployment: + # - Large data migrations. Typically we want these to be run manually so that they can be + # monitored and not block the deploy for a long period of time while they run. + # - Adding indexes to large tables. Since this can take a long time, we'd generally prefer to + # run this outside deployments so that we don't block them. Note that while adding an index + # is a schema change, it's completely safe to run the operation after the code has deployed. + # Once deployed, run these manually via: https://develop.sentry.dev/database-migrations/#migration-deployment + + is_post_deployment = False + + dependencies = [ + ("sentry", "1007_cleanup_failed_safe_deletes"), + ] + + operations = [ + migrations.AddField( + model_name="organizationmapping", + name="date_updated", + field=models.DateTimeField( + db_default=django.db.models.functions.Now(), + auto_now=True, + db_index=True, + ), + ), + ] diff --git a/src/sentry/models/organizationmapping.py b/src/sentry/models/organizationmapping.py index 7906dec667bdfb..0a703a67df633c 100644 --- a/src/sentry/models/organizationmapping.py +++ b/src/sentry/models/organizationmapping.py @@ -3,6 +3,7 @@ from typing import TYPE_CHECKING from django.db import models +from django.db.models.functions import Now from django.utils import timezone from sentry import roles @@ -53,6 +54,8 @@ class OrganizationMapping(Model): prevent_superuser_access = models.BooleanField(default=False, db_default=False) disable_member_invite = models.BooleanField(default=False, db_default=False) + date_updated = models.DateTimeField(db_default=Now(), auto_now=True, db_index=True) + class Meta: app_label = "sentry" db_table = "sentry_organizationmapping" From 61aba390fd35b9849788a36b7bf42c9c393a22fb Mon Sep 17 00:00:00 2001 From: Mark Story Date: Wed, 26 Nov 2025 12:38:18 -0500 Subject: [PATCH 2/3] Rework migration for date_updated partial application. --- migrations_lockfile.txt | 2 +- ...1009_add_date_updated_to_organizationmapping.py} | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) rename src/sentry/migrations/{1008_add_date_updated_to_organizationmapping.py => 1009_add_date_updated_to_organizationmapping.py} (74%) diff --git a/migrations_lockfile.txt b/migrations_lockfile.txt index fd8656bb0fa025..126be8e952b22c 100644 --- a/migrations_lockfile.txt +++ b/migrations_lockfile.txt @@ -31,7 +31,7 @@ releases: 0004_cleanup_failed_safe_deletes replays: 0006_add_bulk_delete_job -sentry: 1008_loosen_unique_title_contraint +sentry: 1009_add_date_updated_to_organizationmapping social_auth: 0003_social_auth_json_field diff --git a/src/sentry/migrations/1008_add_date_updated_to_organizationmapping.py b/src/sentry/migrations/1009_add_date_updated_to_organizationmapping.py similarity index 74% rename from src/sentry/migrations/1008_add_date_updated_to_organizationmapping.py rename to src/sentry/migrations/1009_add_date_updated_to_organizationmapping.py index 94113e998b9ab0..849dd727c99781 100644 --- a/src/sentry/migrations/1008_add_date_updated_to_organizationmapping.py +++ b/src/sentry/migrations/1009_add_date_updated_to_organizationmapping.py @@ -4,7 +4,7 @@ import django.utils.timezone from django.db import migrations, models -from sentry.new_migrations.migrations import CheckedMigration +from sentry.new_migrations.migrations import CheckedMigration, SafeRunSQL class Migration(CheckedMigration): @@ -23,10 +23,19 @@ class Migration(CheckedMigration): is_post_deployment = False dependencies = [ - ("sentry", "1007_cleanup_failed_safe_deletes"), + ("sentry", "1008_loosen_unique_title_contraint"), ] operations = [ + # This migration had to be reverted after it was merged and ran in some environments. + # Clean up the previous attempt and try again + SafeRunSQL( + sql=""" + ALTER TABLE "sentry_organizationmapping" DROP COLUMN IF EXISTS "date_updated"; + """, + reverse_sql="", + hints={"tables": ["sentry_organizationmapping"]}, + ), migrations.AddField( model_name="organizationmapping", name="date_updated", From 9fc8190a5eafe60a4f1205644ed6286d012f080a Mon Sep 17 00:00:00 2001 From: Mark Story Date: Wed, 26 Nov 2025 14:20:09 -0500 Subject: [PATCH 3/3] Fix imports --- .../1009_add_date_updated_to_organizationmapping.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sentry/migrations/1009_add_date_updated_to_organizationmapping.py b/src/sentry/migrations/1009_add_date_updated_to_organizationmapping.py index 849dd727c99781..cb3b483b34177e 100644 --- a/src/sentry/migrations/1009_add_date_updated_to_organizationmapping.py +++ b/src/sentry/migrations/1009_add_date_updated_to_organizationmapping.py @@ -1,10 +1,10 @@ # Generated by Django 5.2.8 on 2025-11-20 21:13 import django.db.models.functions -import django.utils.timezone from django.db import migrations, models -from sentry.new_migrations.migrations import CheckedMigration, SafeRunSQL +from sentry.new_migrations.migrations import CheckedMigration +from sentry.new_migrations.monkey.special import SafeRunSQL class Migration(CheckedMigration):