Browse Source

Expand bulk deletion support

David Cramer 9 years ago
parent
commit
641f7d17c8
2 changed files with 35 additions and 13 deletions
  1. 13 10
      src/sentry/tasks/deletion.py
  2. 22 3
      tests/sentry/tasks/test_deletion.py

+ 13 - 10
src/sentry/tasks/deletion.py

@@ -91,9 +91,10 @@ def delete_team(object_id, continuous=True, **kwargs):
 @retry(exclude=(DeleteAborted,))
 def delete_project(object_id, continuous=True, **kwargs):
     from sentry.models import (
-        Project, ProjectKey, ProjectStatus, TagKey, TagValue, GroupTagKey,
-        GroupTagValue, Activity, EventMapping, Group, GroupEmailThread,
-        GroupRuleStatus, GroupHash, GroupMeta, GroupSeen, UserReport
+        Activity, EventMapping, Group, GroupEmailThread,
+        GroupAssignee, GroupRuleStatus, GroupHash, GroupMeta, GroupSeen,
+        GroupTagKey, GroupTagValue, Project, ProjectKey, ProjectStatus,
+        SavedSearchUserDefault, SavedSearch, TagKey, TagValue, UserReport
     )
 
     try:
@@ -110,9 +111,10 @@ def delete_project(object_id, continuous=True, **kwargs):
 
     # XXX: remove keys first to prevent additional data from flowing in
     model_list = (
-        ProjectKey, TagKey, TagValue, GroupTagKey, GroupTagValue, EventMapping,
-        Activity, GroupRuleStatus, GroupHash, GroupSeen, UserReport,
-        GroupEmailThread
+        Activity, EventMapping, GroupAssignee, GroupEmailThread,
+        GroupRuleStatus, GroupHash, GroupSeen, UserReport, GroupTagKey,
+        GroupTagValue, ProjectKey, TagKey, TagValue, SavedSearchUserDefault,
+        SavedSearch
     )
     for model in model_list:
         has_more = bulk_delete_objects(model, project_id=p.id, logger=logger)
@@ -151,8 +153,9 @@ def delete_project(object_id, continuous=True, **kwargs):
 @retry(exclude=(DeleteAborted,))
 def delete_group(object_id, continuous=True, **kwargs):
     from sentry.models import (
-        EventMapping, Group, GroupHash, GroupMeta, GroupRuleStatus, GroupStatus,
-        GroupTagKey, GroupTagValue, GroupEmailThread, UserReport
+        EventMapping, Group, GroupAssignee, GroupHash, GroupMeta,
+        GroupRuleStatus, GroupStatus, GroupTagKey, GroupTagValue,
+        GroupEmailThread, UserReport
     )
 
     try:
@@ -164,8 +167,8 @@ def delete_group(object_id, continuous=True, **kwargs):
         group.update(status=GroupStatus.DELETION_IN_PROGRESS)
 
     bulk_model_list = (
-        GroupHash, GroupMeta, GroupRuleStatus, GroupTagValue, GroupTagKey,
-        EventMapping, GroupEmailThread, UserReport
+        GroupAssignee, GroupHash, GroupMeta, GroupRuleStatus, GroupTagValue,
+        GroupTagKey, EventMapping, GroupEmailThread, UserReport
     )
     for model in bulk_model_list:
         has_more = bulk_delete_objects(model, group_id=object_id, logger=logger)

+ 22 - 3
tests/sentry/tasks/test_deletion.py

@@ -4,11 +4,13 @@ from mock import patch
 
 from sentry.exceptions import DeleteAborted
 from sentry.models import (
-    GroupMeta, GroupTagKey, GroupTagValue, Organization, OrganizationStatus,
-    Project, ProjectStatus, TagKey, TagValue, Team, TeamStatus
+    Group, GroupAssignee, GroupMeta, GroupStatus, GroupTagKey, GroupTagValue,
+    Organization, OrganizationStatus, Project, ProjectStatus, TagKey, TagValue,
+    Team, TeamStatus
 )
 from sentry.tasks.deletion import (
-    delete_organization, delete_project, delete_tag_key, delete_team
+    delete_group, delete_organization, delete_project, delete_tag_key,
+    delete_team
 )
 from sentry.testutils import TestCase
 
@@ -78,6 +80,7 @@ class DeleteProjectTest(TestCase):
             status=ProjectStatus.PENDING_DELETION,
         )
         group = self.create_group(project=project)
+        GroupAssignee.objects.create(group=group, project=project, user=self.user)
         GroupMeta.objects.create(group=group, key='foo', value='bar')
 
         with self.tasks():
@@ -148,3 +151,19 @@ class DeleteTagKeyTest(TestCase):
         assert TagKey.objects.filter(id=tk2.id).exists()
         assert GroupTagKey.objects.filter(id=gtk2.id).exists()
         assert GroupTagValue.objects.filter(id=gtv2.id).exists()
+
+
+class DeleteGroupTest(TestCase):
+    def test_simple(self):
+        project = self.create_project()
+        group = self.create_group(
+            project=project,
+            status=GroupStatus.PENDING_DELETION,
+        )
+        GroupAssignee.objects.create(group=group, project=project, user=self.user)
+        GroupMeta.objects.create(group=group, key='foo', value='bar')
+
+        with self.tasks():
+            delete_group(object_id=group.id)
+
+        assert not Group.objects.filter(id=group.id).exists()