def truncate_denormalizations(group): tagstore.delete_all_group_tag_keys(group.project_id, group.id) tagstore.delete_all_group_tag_values(group.project_id, group.id) GroupRelease.objects.filter(group_id=group.id).delete() # XXX: This can cause a race condition with the ``FirstSeenEventCondition`` # where notifications can be erroneously sent if they occur in this group # before the reprocessing of the denormalizated data completes, since a new # ``GroupEnvironment`` will be created. for instance in GroupEnvironment.objects.filter(group_id=group.id): instance.delete() environment_ids = list( Environment.objects.filter(projects=group.project).values_list( "id", flat=True)) tsdb.delete([tsdb.models.group], [group.id], environment_ids=environment_ids) tsdb.delete_distinct_counts([tsdb.models.users_affected_by_group], [group.id], environment_ids=environment_ids) tsdb.delete_frequencies( [ tsdb.models.frequent_releases_by_group, tsdb.models.frequent_environments_by_group ], [group.id], ) features.delete(group)
def delete_instance(self, instance): from sentry.similarity import features if not self.skip_models or features not in self.skip_models: features.delete(instance) return super(GroupDeletionTask, self).delete_instance(instance)
def truncate_denormalizations(group): tagstore.delete_all_group_tag_keys(group.project_id, group.id) tagstore.delete_all_group_tag_values(group.project_id, group.id) GroupRelease.objects.filter( group_id=group.id, ).delete() environment_ids = list( Environment.objects.filter( projects=group.project ).values_list('id', flat=True) ) tsdb.delete([ tsdb.models.group, ], [group.id], environment_ids=environment_ids) tsdb.delete_distinct_counts([ tsdb.models.users_affected_by_group, ], [group.id], environment_ids=environment_ids) tsdb.delete_frequencies( [ tsdb.models.frequent_releases_by_group, tsdb.models.frequent_environments_by_group, ], [group.id] ) features.delete(group)
def truncate_denormalizations(group): GroupTagKey.objects.filter( group_id=group.id, ).delete() GroupTagValue.objects.filter( group_id=group.id, ).delete() GroupRelease.objects.filter( group_id=group.id, ).delete() tsdb.delete([ tsdb.models.group, ], [group.id]) tsdb.delete_distinct_counts([ tsdb.models.users_affected_by_group, ], [group.id]) tsdb.delete_frequencies( [ tsdb.models.frequent_releases_by_group, tsdb.models.frequent_environments_by_group, ], [group.id] ) features.delete(group)
def delete_group(object_id, transaction_id=None, continuous=True, **kwargs): from sentry.models import ( EventMapping, Group, GroupAssignee, GroupBookmark, GroupCommitResolution, GroupHash, GroupMeta, GroupRelease, GroupResolution, GroupRuleStatus, GroupSnooze, GroupSubscription, GroupStatus, GroupTagKey, GroupTagValue, GroupEmailThread, GroupRedirect, UserReport ) try: group = Group.objects.get(id=object_id) except Group.DoesNotExist: return if group.status != GroupStatus.DELETION_IN_PROGRESS: group.update(status=GroupStatus.DELETION_IN_PROGRESS) bulk_model_list = ( # prioritize GroupHash GroupHash, GroupAssignee, GroupCommitResolution, GroupBookmark, GroupMeta, GroupRelease, GroupResolution, GroupRuleStatus, GroupSnooze, GroupTagValue, GroupTagKey, EventMapping, GroupEmailThread, GroupRedirect, GroupSubscription, UserReport, ) for model in bulk_model_list: has_more = bulk_delete_objects(model, group_id=object_id, logger=logger) if has_more: if continuous: delete_group.apply_async( kwargs={'object_id': object_id, 'transaction_id': transaction_id}, countdown=15, ) return has_more = delete_events(relation={'group_id': object_id}, logger=logger) if has_more: if continuous: delete_group.apply_async( kwargs={'object_id': object_id, 'transaction_id': transaction_id}, ) return features.delete(group) g_id = group.id group.delete() logger.info('object.delete.executed', extra={ 'object_id': g_id, 'transaction_id': transaction_id, 'model': Group.__name__, })
def truncate_denormalizations(group): tagstore.delete_all_group_tag_keys(group.project_id, group.id) tagstore.delete_all_group_tag_values(group.project_id, group.id) GroupRelease.objects.filter( group_id=group.id, ).delete() # XXX: This can cause a race condition with the ``FirstSeenEventCondition`` # where notifications can be erroneously sent if they occur in this group # before the reprocessing of the denormalizated data completes, since a new # ``GroupEnvironment`` will be created. for instance in GroupEnvironment.objects.filter(group_id=group.id): instance.delete() environment_ids = list( Environment.objects.filter( projects=group.project ).values_list('id', flat=True) ) tsdb.delete([ tsdb.models.group, ], [group.id], environment_ids=environment_ids) tsdb.delete_distinct_counts([ tsdb.models.users_affected_by_group, ], [group.id], environment_ids=environment_ids) tsdb.delete_frequencies( [ tsdb.models.frequent_releases_by_group, tsdb.models.frequent_environments_by_group, ], [group.id] ) features.delete(group)
def truncate_denormalizations(group): tagstore.delete_all_group_tag_keys(group.id) tagstore.delete_all_group_tag_values(group.id) GroupRelease.objects.filter( group_id=group.id, ).delete() tsdb.delete([ tsdb.models.group, ], [group.id]) tsdb.delete_distinct_counts([ tsdb.models.users_affected_by_group, ], [group.id]) tsdb.delete_frequencies( [ tsdb.models.frequent_releases_by_group, tsdb.models.frequent_environments_by_group, ], [group.id] ) features.delete(group)
def delete_instance(self, instance): from sentry.similarity import features features.delete(instance) return super(GroupDeletionTask, self).delete_instance(instance)