Browse Source

fix (dyn-sampling): Remove dynamicSampling data from ProjectDetails endpoint [TET-617] (#45637)

Before this change:

<img width="482" alt="image"
src="https://user-images.githubusercontent.com/1374633/224351317-e0d735bb-28b2-468b-a7bf-659712ca523c.png">

After this change:

<img width="513" alt="image"
src="https://user-images.githubusercontent.com/1374633/224351559-72927201-5d8d-4185-b839-4ebd56ff800c.png">
Andrii Soldatenko 2 years ago
parent
commit
4b85139b3b

+ 1 - 1
migrations_lockfile.txt

@@ -6,5 +6,5 @@ To resolve this, rebase against latest master and regenerate your migration. Thi
 will then be regenerated, and you should be able to merge without conflicts.
 
 nodestore: 0002_nodestore_no_dictfield
-sentry: 0377_groupedmesssage_type_individual_index
+sentry: 0378_remove_dynamic_sampling_depricated_data
 social_auth: 0001_initial

+ 0 - 1
src/sentry/api/serializers/models/project.py

@@ -878,7 +878,6 @@ class DetailedProjectSerializer(ProjectWithTeamSerializer):
                 "defaultEnvironment": attrs["options"].get("sentry:default_environment"),
                 "relayPiiConfig": attrs["options"].get("sentry:relay_pii_config"),
                 "builtinSymbolSources": get_value_with_default("sentry:builtin_symbol_sources"),
-                "dynamicSampling": get_value_with_default("sentry:dynamic_sampling"),
                 "dynamicSamplingBiases": get_value_with_default("sentry:dynamic_sampling_biases"),
                 "performanceIssueCreationRate": get_value_with_default(
                     "sentry:performance_issue_creation_rate"

+ 48 - 0
src/sentry/migrations/0378_remove_dynamic_sampling_depricated_data.py

@@ -0,0 +1,48 @@
+# Generated by Django 2.2.28 on 2023-03-10 15:59
+
+from django.db import migrations
+
+from sentry.new_migrations.migrations import CheckedMigration
+
+
+def remove_depricated_dynamic_sampling_data(apps, schema_editor):
+    """
+    Delete the rows in the ProjectOption table that relate to plugins we've deleted.
+    """
+    ProjectOption = apps.get_model("sentry", "ProjectOption")
+    for project_option in ProjectOption.objects.filter(key="sentry:dynamic_sampling"):
+        project_option.delete()
+
+
+class Migration(CheckedMigration):
+    # 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", "0377_groupedmesssage_type_individual_index"),
+    ]
+
+    operations = [
+        migrations.RunPython(
+            remove_depricated_dynamic_sampling_data,
+            migrations.RunPython.noop,
+            hints={"tables": ["sentry_projectoptions"]},
+        )
+    ]