Skip to content

Commit 740eeee

Browse files
authored
fix(alert): Delete IncidentTrigger as child of AlertRuleTrigger (#101460)
There can be 10s-100s of thousands of IncidentTrigger rows associated with an AlertRuleTrigger. In SENTRY-4A76, we see repeated failed attempts to delete an AlertRuleTrigger with 15k IncidentTriggers, and this change will hopefully help there.
1 parent 7e5a3d0 commit 740eeee

File tree

2 files changed

+10
-0
lines changed

2 files changed

+10
-0
lines changed

src/sentry/deletions/defaults/alert_rule_trigger.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@
55
class AlertRuleTriggerDeletionTask(ModelDeletionTask[AlertRuleTrigger]):
66
def get_child_relations(self, instance: AlertRuleTrigger) -> list[BaseRelation]:
77
from sentry.incidents.models.alert_rule import AlertRuleTriggerAction
8+
from sentry.incidents.models.incident import IncidentTrigger
89
from sentry.workflow_engine.models import DataConditionAlertRuleTrigger
910

1011
return [
1112
ModelRelation(AlertRuleTriggerAction, {"alert_rule_trigger_id": instance.id}),
13+
ModelRelation(IncidentTrigger, {"alert_rule_trigger_id": instance.id}),
1214
ModelRelation(DataConditionAlertRuleTrigger, {"alert_rule_trigger_id": instance.id}),
1315
]

tests/sentry/deletions/test_alert_rule_trigger.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from sentry.deletions.tasks.scheduled import run_scheduled_deletions
22
from sentry.incidents.models.alert_rule import AlertRule, AlertRuleTrigger, AlertRuleTriggerAction
3+
from sentry.incidents.models.incident import IncidentTrigger, TriggerStatus
34
from sentry.testutils.hybrid_cloud import HybridCloudTestMixin
45
from sentry.workflow_engine.models import DataConditionAlertRuleTrigger
56
from tests.sentry.workflow_engine.test_base import BaseWorkflowTest
@@ -16,6 +17,12 @@ def test_simple(self) -> None:
1617
DataConditionAlertRuleTrigger.objects.create(
1718
data_condition=data_condition, alert_rule_trigger_id=alert_rule_trigger.id
1819
)
20+
incident = self.create_incident(alert_rule=alert_rule)
21+
incident_trigger = self.create_incident_trigger(
22+
incident=incident,
23+
alert_rule_trigger=alert_rule_trigger,
24+
status=TriggerStatus.ACTIVE.value,
25+
)
1926

2027
self.ScheduledDeletion.schedule(instance=alert_rule_trigger, days=0)
2128

@@ -25,6 +32,7 @@ def test_simple(self) -> None:
2532
assert AlertRule.objects.filter(id=alert_rule.id).exists()
2633
assert not AlertRuleTrigger.objects.filter(id=alert_rule_trigger.id).exists()
2734
assert not AlertRuleTriggerAction.objects.filter(id=alert_rule_trigger_action.id).exists()
35+
assert not IncidentTrigger.objects.filter(id=incident_trigger.id).exists()
2836
assert not DataConditionAlertRuleTrigger.objects.filter(
2937
alert_rule_trigger_id=alert_rule_trigger.id
3038
).exists()

0 commit comments

Comments
 (0)