From fa229ffcf3cdab76ebd2218ec72ee58e5d87dbfc Mon Sep 17 00:00:00 2001 From: "sentry-ai-autofix-experimental[bot]" <157164994+sentry-ai-autofix-experimental[bot]@users.noreply.github.com> Date: Tue, 5 Mar 2024 19:29:16 +0000 Subject: [PATCH 1/2] Fix KeyError by adding default values and logging for missing keys --- src/sentry/utils/cache.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/sentry/utils/cache.py b/src/sentry/utils/cache.py index 2d7914b4cb9c2..281080ce01a86 100644 --- a/src/sentry/utils/cache.py +++ b/src/sentry/utils/cache.py @@ -40,5 +40,9 @@ def __get__(self, obj: Any, type: Any = None) -> T: return value -def cache_key_for_event(data: Mapping[str, Any]) -> str: - return "e:{}:{}".format(data["event_id"], data["project"]) + def cache_key_for_event(data: Mapping[str, Any]) -> str: + event_id = data.get('event_id', 'unknown_event_id') + project = data.get('project', 'unknown_project') + if event_id == 'unknown_event_id' or project == 'unknown_project': + logger.error(f\"cache_key_for_event called with missing data. event_id: {event_id}, project: {project}\") + return \"e:{}:{}'.format(event_id, project) From d5cf77552d2583ae02ae6c3141e4e6bda5947c65 Mon Sep 17 00:00:00 2001 From: "sentry-ai-autofix-experimental[bot]" <157164994+sentry-ai-autofix-experimental[bot]@users.noreply.github.com> Date: Tue, 5 Mar 2024 19:29:17 +0000 Subject: [PATCH 2/2] Add preliminary check for 'event_id' and 'project' in the store method --- src/sentry/eventstore/processing/base.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/sentry/eventstore/processing/base.py b/src/sentry/eventstore/processing/base.py index 03f90c65a1303..12459dbb29542 100644 --- a/src/sentry/eventstore/processing/base.py +++ b/src/sentry/eventstore/processing/base.py @@ -38,6 +38,9 @@ def exists(self, event: Event) -> bool: return self.get(key) is not None def store(self, event: Event, unprocessed: bool = False) -> str: + if not event.get('event_id') or not event.get('project'): + logger.error(f\"store method called with event missing 'event_id' or 'project'. Event data: {event}\") + return with sentry_sdk.start_span(op="eventstore.processing.store"): key = cache_key_for_event(event) if unprocessed: