Просмотр исходного кода

feat: Add a project/status/last-seen index to sentry_groupedmessage (#26416)

Anton Ovchinnikov 3 лет назад
Родитель
Сommit
6211129344

+ 1 - 1
migrations_lockfile.txt

@@ -7,5 +7,5 @@ will then be regenerated, and you should be able to merge without conflicts.
 
 jira_ac: 0001_initial
 nodestore: 0002_nodestore_no_dictfield
-sentry: 0202_org_slug_upper_idx
+sentry: 0203_groupedmessage_status_index
 social_auth: 0001_initial

+ 52 - 0
src/sentry/migrations/0203_groupedmessage_status_index.py

@@ -0,0 +1,52 @@
+# Generated by Django 1.11.29 on 2021-06-07 08:22
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+    # This flag is used to mark that a migration shouldn't be automatically run in
+    # production. We set this to True for operations that we think are risky and want
+    # someone from ops to run manually and monitor.
+    # General advice is that if in doubt, mark your migration as `is_dangerous`.
+    # Some things you should always mark as dangerous:
+    # - Large data migrations. Typically we want these to be run manually by ops so that
+    #   they can be monitored. Since data migrations will now hold a transaction open
+    #   this is even more important.
+    # - Adding columns to highly active tables, even ones that are NULL.
+    is_dangerous = True
+
+    # This flag is used to decide whether to run this migration in a transaction or not.
+    # By default we prefer to run in a transaction, but for migrations where you want
+    # to `CREATE INDEX CONCURRENTLY` this needs to be set to False. Typically you'll
+    # want to create an index concurrently when adding one to an existing table.
+    # You'll also usually want to set this to `False` if you're writing a data
+    # migration, since we don't want the entire migration to run in one long-running
+    # transaction.
+    atomic = False
+
+    dependencies = [
+        ("sentry", "0202_org_slug_upper_idx"),
+    ]
+
+    operations = [
+        migrations.SeparateDatabaseAndState(
+            database_operations=[
+                migrations.RunSQL(
+                    """
+                    CREATE INDEX CONCURRENTLY IF NOT EXISTS "sentry_groupedmessage_project_id_status_last_s_6b8195a7_idx" ON "sentry_groupedmessage" ("project_id", "status", "last_seen", "id");
+                    """,
+                    reverse_sql="DROP INDEX CONCURRENTLY IF EXISTS sentry_groupedmessage_project_id_status_last_s_6b8195a7_idx",
+                ),
+            ],
+            state_operations=[
+                migrations.AlterIndexTogether(
+                    name="group",
+                    index_together={
+                        ("project", "id"),
+                        ("project", "status", "last_seen", "id"),
+                        ("project", "first_release"),
+                    },
+                ),
+            ],
+        ),
+    ]

+ 5 - 1
src/sentry/models/group.py

@@ -347,7 +347,11 @@ class Group(Model):
         verbose_name_plural = _("grouped messages")
         verbose_name = _("grouped message")
         permissions = (("can_view", "Can view"),)
-        index_together = [("project", "first_release"), ("project", "id")]
+        index_together = [
+            ("project", "first_release"),
+            ("project", "id"),
+            ("project", "status", "last_seen", "id"),
+        ]
         unique_together = (("project", "short_id"),)
 
     __repr__ = sane_repr("project_id")