Browse Source

ref(rule): Schedule rule deletion in migration (#52581)

A follow up to https://github.com/getsentry/sentry/pull/52411 to modify
the migration to schedule the objects for deletion rather than directly
deleting them since the migration timed out.
Colleen O'Rourke 1 year ago
parent
commit
dc7a405e91
1 changed files with 29 additions and 3 deletions
  1. 29 3
      src/sentry/migrations/0507_delete_pending_deletion_rules.py

+ 29 - 3
src/sentry/migrations/0507_delete_pending_deletion_rules.py

@@ -6,13 +6,39 @@ from sentry.new_migrations.migrations import CheckedMigration
 from sentry.utils.query import RangeQuerySetWrapperWithProgressBar
 
 
-def delete_rules(apps, schema_editor):
-    from sentry.constants import ObjectStatus
+class ObjectStatus:
+    VISIBLE = 0
+    HIDDEN = 1
+    PENDING_DELETION = 2
+    DELETION_IN_PROGRESS = 3
+
+    ACTIVE = 0
+    DISABLED = 1
+
+
+def schedule(cls, instance, days=30):
+    from datetime import timedelta
 
+    from django.utils import timezone
+
+    model = type(instance)
+    model_name = model.__name__
+    cls.objects.update_or_create(
+        app_label=instance._meta.app_label,
+        model_name=model_name,
+        object_id=instance.pk,
+        date_scheduled=timezone.now() + timedelta(days=days, hours=0),
+        data={},
+        actor_id=None,
+    )
+
+
+def delete_rules(apps, schema_editor):
     Rule = apps.get_model("sentry", "Rule")
+    RegionScheduledDeletion = apps.get_model("sentry", "RegionScheduledDeletion")
     for rule in RangeQuerySetWrapperWithProgressBar(Rule.objects.all()):
         if rule.status in (ObjectStatus.PENDING_DELETION, ObjectStatus.DISABLED):
-            rule.delete()
+            schedule(RegionScheduledDeletion, rule, days=0)
 
 
 class Migration(CheckedMigration):