From d4d3249ded000219a4f875943632c3d0f928d58d Mon Sep 17 00:00:00 2001
From: Eric Eastwood <erice@element.io>
Date: Wed, 7 Sep 2022 11:41:52 -0500
Subject: [PATCH] Instrument `get_metadata_for_events` for tracing (#13730)

When backfilling, `_get_state_ids_after_missing_prev_event` calls [`get_metadata_for_events`](https://github.com/matrix-org/synapse/blob/26bc26586b4b95d63ce7e453e9312469843f796e/synapse/handlers/federation_event.py#L1133). For `#matrix:matrix.org`, it's called with 77k `state_events` which means 77 calls to the database and takes 28 seconds.
---
 changelog.d/13730.misc                  | 1 +
 synapse/storage/databases/main/state.py | 2 ++
 2 files changed, 3 insertions(+)
 create mode 100644 changelog.d/13730.misc

diff --git a/changelog.d/13730.misc b/changelog.d/13730.misc
new file mode 100644
index 000000000..06da6581a
--- /dev/null
+++ b/changelog.d/13730.misc
@@ -0,0 +1 @@
+Instrument `get_metadata_for_events` for understandable traces in Jaeger.
diff --git a/synapse/storage/databases/main/state.py b/synapse/storage/databases/main/state.py
index e607ccfdc..af7bebee8 100644
--- a/synapse/storage/databases/main/state.py
+++ b/synapse/storage/databases/main/state.py
@@ -23,6 +23,7 @@ from synapse.api.errors import NotFoundError, UnsupportedRoomVersionError
 from synapse.api.room_versions import KNOWN_ROOM_VERSIONS, RoomVersion
 from synapse.events import EventBase
 from synapse.events.snapshot import EventContext
+from synapse.logging.opentracing import trace
 from synapse.storage._base import SQLBaseStore
 from synapse.storage.database import (
     DatabasePool,
@@ -143,6 +144,7 @@ class StateGroupWorkerStore(EventsWorkerStore, SQLBaseStore):
 
         return room_version
 
+    @trace
     async def get_metadata_for_events(
         self, event_ids: Collection[str]
     ) -> Dict[str, EventMetadata]: