Skip to content

Commit 3b22980

Browse files
cathtengandrewshie-sentry
authored andcommitted
ref(alerts): fetch group_to_groupevent once per delayed processing task (#91831)
1 parent bcd6dd9 commit 3b22980

File tree

1 file changed

+30
-20
lines changed

1 file changed

+30
-20
lines changed

src/sentry/rules/processing/delayed_processing.py

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -498,30 +498,40 @@ def fire_rules(
498498
timedelta(seconds=40),
499499
extra={"project_id": project_id},
500500
) as tracker:
501+
groups_to_fire = set().union(*rules_to_fire.values())
502+
group_to_groupevent = get_group_to_groupevent(
503+
log_config, parsed_rulegroup_to_event_data, project_id, groups_to_fire
504+
)
505+
if log_config.num_events_issue_debugging or log_config.workflow_engine_process_workflows:
506+
serialized_groups = {
507+
group.id: group_event.event_id for group, group_event in group_to_groupevent.items()
508+
}
509+
logger.info(
510+
"delayed_processing.group_to_groupevent",
511+
extra={
512+
"group_to_groupevent": serialized_groups,
513+
"project_id": project_id,
514+
},
515+
)
516+
group_id_to_group = {group.id: group for group in group_to_groupevent.keys()}
501517
for rule, group_ids in rules_to_fire.items():
502518
with tracker.track(f"rule_{rule.id}"):
503519
frequency = rule.data.get("frequency") or Rule.DEFAULT_FREQUENCY
504520
freq_offset = now - timedelta(minutes=frequency)
505-
group_to_groupevent = get_group_to_groupevent(
506-
log_config, parsed_rulegroup_to_event_data, project.id, group_ids
507-
)
508-
if (
509-
log_config.num_events_issue_debugging
510-
or log_config.workflow_engine_process_workflows
511-
):
512-
serialized_groups = {
513-
group.id: group_event.event_id
514-
for group, group_event in group_to_groupevent.items()
515-
}
516-
logger.info(
517-
"delayed_processing.group_to_groupevent",
518-
extra={
519-
"group_to_groupevent": serialized_groups,
520-
"project_id": project_id,
521-
"rule_id": rule.id,
522-
},
523-
)
524-
for group, groupevent in group_to_groupevent.items():
521+
for group_id in group_ids:
522+
group = group_id_to_group.get(group_id)
523+
if not group:
524+
# we need to fire the rule for this group, but we don't have the group
525+
logger.error(
526+
"delayed_processing.missing_group_to_fire",
527+
extra={
528+
"rule_id": rule.id,
529+
"group_id": group_id,
530+
"project_id": project_id,
531+
},
532+
)
533+
continue
534+
525535
rule_statuses = bulk_get_rule_status(alert_rules, group, project)
526536
status = rule_statuses[rule.id]
527537
if status.last_active and status.last_active > freq_offset:

0 commit comments

Comments
 (0)