Browse Source

feat(sourcemaps): Add deletion of bundles (#46366)

Riccardo Busetti 1 year ago
parent
commit
9af20330c8

+ 16 - 0
src/sentry/deletions/defaults/artifactbundle.py

@@ -0,0 +1,16 @@
+from ..base import ModelDeletionTask, ModelRelation
+
+
+class ArtifactBundleDeletionTask(ModelDeletionTask):
+    def get_child_relations(self, instance):
+        from sentry.models import (
+            DebugIdArtifactBundle,
+            ProjectArtifactBundle,
+            ReleaseArtifactBundle,
+        )
+
+        return [
+            ModelRelation(ReleaseArtifactBundle, {"artifact_bundle_id": instance.id}),
+            ModelRelation(DebugIdArtifactBundle, {"artifact_bundle_id": instance.id}),
+            ModelRelation(ProjectArtifactBundle, {"artifact_bundle_id": instance.id}),
+        ]

+ 47 - 0
tests/sentry/deletions/test_artifactbundle.py

@@ -0,0 +1,47 @@
+from sentry.models import (
+    ArtifactBundle,
+    DebugIdArtifactBundle,
+    File,
+    ProjectArtifactBundle,
+    ReleaseArtifactBundle,
+    ScheduledDeletion,
+    SourceFileType,
+)
+from sentry.tasks.deletion.scheduled import run_deletion
+from sentry.testutils import TransactionTestCase
+
+
+class DeleteArtifactBundleTest(TransactionTestCase):
+    def test_simple(self):
+        org = self.create_organization()
+        project = self.create_project(organization=org)
+        release = self.create_release(version="1.0", project=project)
+        dist = release.add_dist("android")
+        artifact_bundle = self.create_artifact_bundle(org=org)
+        ReleaseArtifactBundle.objects.create(
+            organization_id=org.id,
+            release_name=release.version,
+            dist_name=dist.name,
+            artifact_bundle=artifact_bundle,
+        )
+        DebugIdArtifactBundle.objects.create(
+            organization_id=org.id,
+            debug_id="c29728de-4dbd-4c08-bd50-7509e1ee2535",
+            source_file_type=SourceFileType.MINIFIED_SOURCE.value,
+            artifact_bundle=artifact_bundle,
+        )
+        ProjectArtifactBundle.objects.create(
+            organization_id=org.id, project_id=project.id, artifact_bundle=artifact_bundle
+        )
+
+        deletion = ScheduledDeletion.schedule(artifact_bundle, days=0)
+        deletion.update(in_progress=True)
+
+        with self.tasks():
+            run_deletion(deletion.id)
+
+        assert not ArtifactBundle.objects.filter(id=artifact_bundle.id).exists()
+        assert not ReleaseArtifactBundle.objects.filter(artifact_bundle=artifact_bundle).exists()
+        assert not DebugIdArtifactBundle.objects.filter(artifact_bundle=artifact_bundle).exists()
+        assert not ProjectArtifactBundle.objects.filter(artifact_bundle=artifact_bundle).exists()
+        assert not File.objects.filter(id=artifact_bundle.file.id).exists()