Browse Source

ref(tags): Extract tag related models into tagstore's legacy backend (#6327)

Brett Hoerner 7 years ago
parent
commit
a9d7b1ba5b

+ 0 - 29
src/sentry/api/serializers/models/grouptagkey.py

@@ -1,29 +0,0 @@
-from __future__ import absolute_import
-
-import six
-
-from sentry import tagstore
-from sentry.api.serializers import Serializer, register
-from sentry.models import GroupTagKey
-
-
-@register(GroupTagKey)
-class GroupTagKeySerializer(Serializer):
-    def get_attrs(self, item_list, user):
-        result = {}
-        for item in item_list:
-            key = tagstore.get_standardized_key(item.key)
-            result[item] = {
-                'name': tagstore.get_tag_key_label(item.key),
-                'key': key,
-            }
-
-        return result
-
-    def serialize(self, obj, attrs, user):
-        return {
-            'id': six.text_type(obj.id),
-            'name': attrs['name'],
-            'key': attrs['key'],
-            'uniqueValues': obj.values_seen,
-        }

+ 0 - 30
src/sentry/api/serializers/models/grouptagvalue.py

@@ -1,30 +0,0 @@
-from __future__ import absolute_import
-
-import six
-
-from sentry import tagstore
-from sentry.api.serializers import Serializer, register
-from sentry.models import GroupTagValue
-
-
-@register(GroupTagValue)
-class GroupTagValueSerializer(Serializer):
-    def get_attrs(self, item_list, user):
-        result = {}
-        for item in item_list:
-            result[item] = {
-                'name': tagstore.get_tag_value_label(item.key, item.value),
-            }
-
-        return result
-
-    def serialize(self, obj, attrs, user):
-        return {
-            'id': six.text_type(obj.id),
-            'name': attrs['name'],
-            'key': tagstore.get_standardized_key(obj.key),
-            'value': obj.value,
-            'count': obj.times_seen,
-            'lastSeen': obj.last_seen,
-            'firstSeen': obj.first_seen,
-        }

+ 0 - 18
src/sentry/api/serializers/models/tagkey.py

@@ -1,18 +0,0 @@
-from __future__ import absolute_import
-
-import six
-
-from sentry import tagstore
-from sentry.api.serializers import Serializer, register
-from sentry.models import TagKey
-
-
-@register(TagKey)
-class TagKeySerializer(Serializer):
-    def serialize(self, obj, attrs, user):
-        return {
-            'id': six.text_type(obj.id),
-            'key': tagstore.get_standardized_key(obj.key),
-            'name': tagstore.get_tag_key_label(obj.key),
-            'uniqueValues': obj.values_seen,
-        }

+ 2 - 25
src/sentry/api/serializers/models/tagvalue.py

@@ -2,31 +2,8 @@ from __future__ import absolute_import
 
 import six
 
-from sentry import tagstore
-from sentry.api.serializers import Serializer, register, serialize
-from sentry.models import EventUser, TagValue
-
-
-@register(TagValue)
-class TagValueSerializer(Serializer):
-    def get_attrs(self, item_list, user):
-        result = {}
-        for item in item_list:
-            result[item] = {
-                'name': tagstore.get_tag_value_label(item.key, item.value),
-            }
-        return result
-
-    def serialize(self, obj, attrs, user):
-        return {
-            'id': six.text_type(obj.id),
-            'key': tagstore.get_standardized_key(obj.key),
-            'name': attrs['name'],
-            'value': obj.value,
-            'count': obj.times_seen,
-            'lastSeen': obj.last_seen,
-            'firstSeen': obj.first_seen,
-        }
+from sentry.api.serializers import Serializer, serialize
+from sentry.models import EventUser
 
 
 class EnvironmentTagValueSerializer(Serializer):

+ 0 - 5
src/sentry/deletions/__init__.py

@@ -43,7 +43,6 @@ def load_defaults():
     default_manager.register(models.EnvironmentProject, BulkModelDeletionTask)
     default_manager.register(models.Event, defaults.EventDeletionTask)
     default_manager.register(models.EventMapping, BulkModelDeletionTask)
-    default_manager.register(models.EventTag, BulkModelDeletionTask)
     default_manager.register(models.EventUser, BulkModelDeletionTask)
     default_manager.register(models.Group, defaults.GroupDeletionTask)
     default_manager.register(models.GroupAssignee, BulkModelDeletionTask)
@@ -60,8 +59,6 @@ def load_defaults():
     default_manager.register(models.GroupShare, BulkModelDeletionTask)
     default_manager.register(models.GroupSnooze, BulkModelDeletionTask)
     default_manager.register(models.GroupSubscription, BulkModelDeletionTask)
-    default_manager.register(models.GroupTagKey, BulkModelDeletionTask)
-    default_manager.register(models.GroupTagValue, BulkModelDeletionTask)
     default_manager.register(models.Organization, defaults.OrganizationDeletionTask)
     default_manager.register(models.OrganizationMemberTeam, BulkModelDeletionTask)
     default_manager.register(models.Project, defaults.ProjectDeletionTask)
@@ -70,8 +67,6 @@ def load_defaults():
     default_manager.register(models.Repository, defaults.RepositoryDeletionTask)
     default_manager.register(models.SavedSearch, BulkModelDeletionTask)
     default_manager.register(models.SavedSearchUserDefault, BulkModelDeletionTask)
-    default_manager.register(models.TagKey, defaults.TagKeyDeletionTask)
-    default_manager.register(models.TagValue, BulkModelDeletionTask)
     default_manager.register(models.Team, defaults.TeamDeletionTask)
     default_manager.register(models.UserReport, BulkModelDeletionTask)
 

+ 19 - 0
src/sentry/deletions/base.py

@@ -63,6 +63,12 @@ class BaseDeletionTask(object):
             # ModelRelation(Model, {'parent_id__in': [i.id for id in instance_list]})
         ]
 
+    def extend_relations(self, child_relations, obj):
+        return child_relations
+
+    def extend_relations_bulk(self, child_relations, obj_list):
+        return child_relations
+
     def filter_relations(self, child_relations):
         if not self.skip_models or not child_relations:
             return child_relations
@@ -80,6 +86,7 @@ class BaseDeletionTask(object):
         self.mark_deletion_in_progress(instance_list)
 
         child_relations = self.get_child_relations_bulk(instance_list)
+        child_relations = self.extend_relations_bulk(child_relations, instance_list)
         child_relations = self.filter_relations(child_relations)
         if child_relations:
             has_more = self.delete_children(child_relations)
@@ -88,6 +95,7 @@ class BaseDeletionTask(object):
 
         for instance in instance_list:
             child_relations = self.get_child_relations(instance)
+            child_relations = self.extend_relations(child_relations, instance)
             child_relations = self.filter_relations(child_relations)
             if child_relations:
                 has_more = self.delete_children(child_relations)
@@ -138,6 +146,17 @@ class ModelDeletionTask(BaseDeletionTask):
             type(self), self.model, self.query, self.order_by, self.transaction_id, self.actor_id,
         )
 
+    def extend_relations(self, child_relations, obj):
+        from sentry.deletions import default_manager
+
+        return child_relations + [rel(obj) for rel in default_manager.dependencies[self.model]]
+
+    def extend_relations_bulk(self, child_relations, obj_list):
+        from sentry.deletions import default_manager
+
+        return child_relations + [rel(obj_list)
+                                  for rel in default_manager.bulk_dependencies[self.model]]
+
     def chunk(self, num_shards=None, shard_id=None):
         """
         Deletes a chunk of this instance's data. Return ``True`` if there is

+ 3 - 13
src/sentry/deletions/defaults/event.py

@@ -2,7 +2,7 @@ from __future__ import absolute_import, print_function
 
 from sentry import nodestore
 
-from ..base import (BaseDeletionTask, BaseRelation, ModelDeletionTask, ModelRelation)
+from ..base import (BaseDeletionTask, BaseRelation, ModelDeletionTask)
 
 
 class NodeDeletionTask(BaseDeletionTask):
@@ -17,16 +17,6 @@ class NodeDeletionTask(BaseDeletionTask):
 
 class EventDeletionTask(ModelDeletionTask):
     def get_child_relations_bulk(self, instance_list):
-        from sentry.models import EventTag
-
         node_ids = [i.data.id for i in instance_list]
-        event_ids = [i.id for i in instance_list]
-
-        return [
-            BaseRelation({
-                'nodes': node_ids
-            }, NodeDeletionTask),
-            ModelRelation(EventTag, {
-                'event_id__in': event_ids,
-            }, ModelDeletionTask),
-        ]
+
+        return [BaseRelation({'nodes': node_ids}, NodeDeletionTask)]

+ 1 - 3
src/sentry/deletions/defaults/group.py

@@ -12,7 +12,6 @@ class GroupDeletionTask(ModelDeletionTask):
         model_list = (
             # prioritize GroupHash
             models.GroupHash,
-            models.EventTag,
             models.EventMapping,
             models.GroupAssignee,
             models.GroupCommitResolution,
@@ -25,14 +24,13 @@ class GroupDeletionTask(ModelDeletionTask):
             models.GroupSeen,
             models.GroupShare,
             models.GroupSnooze,
-            models.GroupTagValue,
-            models.GroupTagKey,
             models.GroupEmailThread,
             models.GroupSubscription,
             models.UserReport,
             # Event is last as its the most time consuming
             models.Event,
         )
+
         relations.extend([ModelRelation(m, {'group_id': instance.id}) for m in model_list])
 
         return relations

+ 4 - 4
src/sentry/deletions/defaults/project.py

@@ -15,12 +15,12 @@ class ProjectDeletionTask(ModelDeletionTask):
         # in bulk
         model_list = (
             models.Activity, models.EnvironmentProject, models.EventMapping, models.EventUser,
-            models.EventTag, models.GroupAssignee, models.GroupBookmark, models.GroupEmailThread,
+            models.GroupAssignee, models.GroupBookmark, models.GroupEmailThread,
             models.GroupHash, models.GroupRelease, models.GroupRuleStatus, models.GroupSeen,
-            models.GroupShare, models.GroupSubscription, models.GroupTagKey, models.GroupTagValue,
-            models.ProjectBookmark, models.ProjectKey, models.SavedSearchUserDefault,
-            models.SavedSearch, models.TagKey, models.TagValue, models.UserReport,
+            models.GroupShare, models.GroupSubscription, models.ProjectBookmark, models.ProjectKey,
+            models.SavedSearchUserDefault, models.SavedSearch, models.UserReport,
         )
+
         relations.extend(
             [
                 ModelRelation(m, {'project_id': instance.id}, BulkModelDeletionTask)

+ 10 - 0
src/sentry/deletions/manager.py

@@ -1,5 +1,7 @@
 from __future__ import absolute_import, print_function
 
+from collections import defaultdict
+
 __all__ = ['DeletionTaskManager']
 
 
@@ -7,6 +9,8 @@ class DeletionTaskManager(object):
     def __init__(self, default_task=None):
         self.tasks = {}
         self.default_task = default_task
+        self.dependencies = defaultdict(set)
+        self.bulk_dependencies = defaultdict(set)
 
     def get(self, task=None, **kwargs):
         if task is None:
@@ -19,3 +23,9 @@ class DeletionTaskManager(object):
 
     def register(self, model, task):
         self.tasks[model] = task
+
+    def add_dependencies(self, model, dependencies):
+        self.dependencies[model] |= set(dependencies)
+
+    def add_bulk_dependencies(self, model, dependencies):
+        self.bulk_dependencies[model] |= set(dependencies)

Some files were not shown because too many files changed in this diff