Browse Source

chore(hybridcloud) Add indexes to tombstone tables

The `unique_together` defined in the parent class did not result in
indexes being created in the child classes. We have some duplicate data
in the tables now, and can't put a unique index on, but we can have
a regular index which will help improve query performance.
Mark Story 10 months ago
parent
commit
8d580520dd

+ 1 - 1
migrations_lockfile.txt

@@ -9,5 +9,5 @@ feedback: 0004_index_together
 hybridcloud: 0016_add_control_cacheversion
 nodestore: 0002_nodestore_no_dictfield
 replays: 0004_index_together
-sentry: 0711_backfill_group_attributes_to_self_hosted
+sentry: 0712_tombstone_indexes
 social_auth: 0002_default_auto_field

+ 40 - 0
src/sentry/migrations/0712_tombstone_indexes.py

@@ -0,0 +1,40 @@
+# Generated by Django 5.0.4 on 2024-05-02 14:04
+
+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", "0711_backfill_group_attributes_to_self_hosted"),
+    ]
+
+    operations = [
+        migrations.AddIndex(
+            model_name="controltombstone",
+            index=models.Index(
+                fields=["table_name", "object_identifier"], name="controltombstone_name_id"
+            ),
+        ),
+        migrations.AddIndex(
+            model_name="regiontombstone",
+            index=models.Index(
+                fields=["table_name", "object_identifier"], name="regiontombstone_name_id"
+            ),
+        ),
+    ]

+ 10 - 1
src/sentry/models/tombstone.py

@@ -26,7 +26,6 @@ class TombstoneBase(Model):
 
     class Meta:
         abstract = True
-        unique_together = ("table_name", "object_identifier")
 
     __relocation_scope__ = RelocationScope.Excluded
 
@@ -56,6 +55,11 @@ class RegionTombstone(TombstoneBase):
     class Meta:
         app_label = "sentry"
         db_table = "sentry_regiontombstone"
+        indexes = (
+            models.Index(
+                name="regiontombstone_name_id", fields=["table_name", "object_identifier"]
+            ),
+        )
 
     __repr__ = sane_repr("id", "table_name", "object_identifier")
 
@@ -65,5 +69,10 @@ class ControlTombstone(TombstoneBase):
     class Meta:
         app_label = "sentry"
         db_table = "sentry_controltombstone"
+        indexes = (
+            models.Index(
+                name="controltombstone_name_id", fields=["table_name", "object_identifier"]
+            ),
+        )
 
     __repr__ = sane_repr("id", "table_name", "object_identifier")