Skip to content

Commit fa11450

Browse files
committed
Change the id list to be all the records and then use chunked to split
them into 10k groups to reduce the querying. update the tests to all be 1 test because of performance reasons in those tests
1 parent 4a1475a commit fa11450

File tree

2 files changed

+11
-12
lines changed

2 files changed

+11
-12
lines changed

src/sentry/workflow_engine/migrations/0112_drop_redundant_error_detector_workflows.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
from sentry.new_migrations.migrations import CheckedMigration
1010
from sentry.utils.iterators import chunked
11-
from sentry.utils.query import RangeQuerySetWrapper, bulk_delete_objects
11+
from sentry.utils.query import bulk_delete_objects
1212

1313
logger = logging.getLogger(__name__)
1414

@@ -30,19 +30,17 @@ def delete_redundant_error_detector_workflows(
3030
Detector = apps.get_model("workflow_engine", "Detector")
3131
DetectorWorkflow = apps.get_model("workflow_engine", "DetectorWorkflow")
3232

33-
error_detectors = Detector.objects.filter(type="error").only("id")
34-
35-
for chunk in chunked(RangeQuerySetWrapper(error_detectors, step=CHUNK_SIZE), CHUNK_SIZE):
36-
chunk_ids = [d.id for d in chunk]
33+
error_detector_ids = Detector.objects.filter(type="error").values_list("id", flat=True)
3734

35+
for chunk in chunked(error_detector_ids, CHUNK_SIZE):
3836
issue_stream_exists = DetectorWorkflow.objects.filter(
3937
workflow_id=OuterRef("workflow_id"),
4038
detector__type="issue_stream",
4139
)
4240

4341
dws_to_delete = (
4442
DetectorWorkflow.objects.filter(
45-
detector_id__in=chunk_ids,
43+
detector_id__in=chunk,
4644
)
4745
.filter(Exists(issue_stream_exists))
4846
.values_list("id", flat=True)

tests/sentry/workflow_engine/migrations/test_0112_drop_redundant_error_detector_workflows.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,20 +51,21 @@ def setup_initial_state(self) -> None:
5151
detector=self.error_detector_p2, workflow=self.workflow_p2
5252
)
5353

54-
def test_deletes_error_workflow_with_matching_issue_stream(self) -> None:
54+
def test_connections_are_correct_after_migration(self) -> None:
55+
# test deletes error workflow with matching issue stream
5556
assert not DetectorWorkflow.objects.filter(id=self.dw_error_should_delete.id).exists()
5657

57-
def test_preserves_issue_stream_workflow_when_error_deleted(self) -> None:
58+
# test preserves issue stream workflow when error deleted
5859
assert DetectorWorkflow.objects.filter(id=self.dw_issue_stream_keep.id).exists()
5960

60-
def test_preserves_error_workflow_without_matching_issue_stream(self) -> None:
61+
# test preserves error workflow without matching issue stream
6162
assert DetectorWorkflow.objects.filter(id=self.dw_error_no_match.id).exists()
6263

63-
def test_preserves_issue_stream_only_workflow(self) -> None:
64+
# test preserves issue stream only workflow
6465
assert DetectorWorkflow.objects.filter(id=self.dw_issue_stream_only.id).exists()
6566

66-
def test_preserves_cross_project_error_workflow_without_issue_stream(self) -> None:
67+
# test preserves cross project error workflow without issue stream
6768
assert DetectorWorkflow.objects.filter(id=self.dw_error_project2.id).exists()
6869

69-
def test_total_count_after_migration(self) -> None:
70+
# test total count after migration
7071
assert DetectorWorkflow.objects.count() == 4

0 commit comments

Comments
 (0)