Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit 92d21fa

Browse files
Instrument /messages for understandable traces in Jaeger (#13368)
In Jaeger: - Before: huge list of uncategorized database calls - After: nice and collapsible into units of work
1 parent 78a3111 commit 92d21fa

File tree

11 files changed

+32
-1
lines changed

11 files changed

+32
-1
lines changed

changelog.d/13368.misc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Instrument `/messages` for understandable traces in Jaeger.

synapse/api/auth.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,12 @@
3131
from synapse.appservice import ApplicationService
3232
from synapse.http import get_request_user_agent
3333
from synapse.http.site import SynapseRequest
34-
from synapse.logging.opentracing import active_span, force_tracing, start_active_span
34+
from synapse.logging.opentracing import (
35+
active_span,
36+
force_tracing,
37+
start_active_span,
38+
trace,
39+
)
3540
from synapse.storage.databases.main.registration import TokenLookupResult
3641
from synapse.types import Requester, UserID, create_requester
3742

@@ -567,6 +572,7 @@ def get_access_token_from_request(request: Request) -> str:
567572

568573
return query_params[0].decode("ascii")
569574

575+
@trace
570576
async def check_user_in_room_or_world_readable(
571577
self, room_id: str, user_id: str, allow_departed_users: bool = False
572578
) -> Tuple[str, Optional[str]]:

synapse/federation/federation_client.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
)
6262
from synapse.federation.transport.client import SendJoinResponse
6363
from synapse.http.types import QueryParams
64+
from synapse.logging.opentracing import trace
6465
from synapse.types import JsonDict, UserID, get_domain_from_id
6566
from synapse.util.async_helpers import concurrently_execute
6667
from synapse.util.caches.expiringcache import ExpiringCache
@@ -233,6 +234,7 @@ async def claim_client_keys(
233234
destination, content, timeout
234235
)
235236

237+
@trace
236238
async def backfill(
237239
self, dest: str, room_id: str, limit: int, extremities: Collection[str]
238240
) -> Optional[List[EventBase]]:

synapse/handlers/federation.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
from synapse.federation.federation_client import InvalidResponseError
6060
from synapse.http.servlet import assert_params_in_dict
6161
from synapse.logging.context import nested_logging_context
62+
from synapse.logging.opentracing import trace
6263
from synapse.metrics.background_process_metrics import run_as_background_process
6364
from synapse.module_api import NOT_SPAM
6465
from synapse.replication.http.federation import (
@@ -180,6 +181,7 @@ def __init__(self, hs: "HomeServer"):
180181
"resume_sync_partial_state_room", self._resume_sync_partial_state_room
181182
)
182183

184+
@trace
183185
async def maybe_backfill(
184186
self, room_id: str, current_depth: int, limit: int
185187
) -> bool:

synapse/handlers/federation_event.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
from synapse.events.snapshot import EventContext
6060
from synapse.federation.federation_client import InvalidResponseError
6161
from synapse.logging.context import nested_logging_context
62+
from synapse.logging.opentracing import trace
6263
from synapse.metrics.background_process_metrics import run_as_background_process
6364
from synapse.replication.http.devices import ReplicationUserDevicesResyncRestServlet
6465
from synapse.replication.http.federation import (
@@ -566,6 +567,7 @@ async def update_state_for_partial_state_event(
566567
event.event_id
567568
)
568569

570+
@trace
569571
async def backfill(
570572
self, dest: str, room_id: str, limit: int, extremities: Collection[str]
571573
) -> None:
@@ -610,6 +612,7 @@ async def backfill(
610612
backfilled=True,
611613
)
612614

615+
@trace
613616
async def _get_missing_events_for_pdu(
614617
self, origin: str, pdu: EventBase, prevs: Set[str], min_depth: int
615618
) -> None:
@@ -710,6 +713,7 @@ async def _get_missing_events_for_pdu(
710713
logger.info("Got %d prev_events", len(missing_events))
711714
await self._process_pulled_events(origin, missing_events, backfilled=False)
712715

716+
@trace
713717
async def _process_pulled_events(
714718
self, origin: str, events: Iterable[EventBase], backfilled: bool
715719
) -> None:
@@ -748,6 +752,7 @@ async def _process_pulled_events(
748752
with nested_logging_context(ev.event_id):
749753
await self._process_pulled_event(origin, ev, backfilled=backfilled)
750754

755+
@trace
751756
async def _process_pulled_event(
752757
self, origin: str, event: EventBase, backfilled: bool
753758
) -> None:

synapse/handlers/pagination.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
from synapse.api.filtering import Filter
2525
from synapse.events.utils import SerializeEventConfig
2626
from synapse.handlers.room import ShutdownRoomResponse
27+
from synapse.logging.opentracing import trace
2728
from synapse.metrics.background_process_metrics import run_as_background_process
2829
from synapse.storage.state import StateFilter
2930
from synapse.streams.config import PaginationConfig
@@ -416,6 +417,7 @@ async def purge_room(self, room_id: str, force: bool = False) -> None:
416417

417418
await self._storage_controllers.purge_events.purge_room(room_id)
418419

420+
@trace
419421
async def get_messages(
420422
self,
421423
requester: Requester,

synapse/handlers/relations.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from synapse.api.constants import RelationTypes
2020
from synapse.api.errors import SynapseError
2121
from synapse.events import EventBase, relation_from_event
22+
from synapse.logging.opentracing import trace
2223
from synapse.storage.databases.main.relations import _RelatedEvent
2324
from synapse.types import JsonDict, Requester, StreamToken, UserID
2425
from synapse.visibility import filter_events_for_client
@@ -361,6 +362,7 @@ async def _get_threads_for_events(
361362

362363
return results
363364

365+
@trace
364366
async def get_bundled_aggregations(
365367
self, events: Iterable[EventBase], user_id: str
366368
) -> Dict[str, BundledAggregations]:

synapse/storage/controllers/state.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929

3030
from synapse.api.constants import EventTypes
3131
from synapse.events import EventBase
32+
from synapse.logging.opentracing import trace
3233
from synapse.storage.state import StateFilter
3334
from synapse.storage.util.partial_state_events_tracker import (
3435
PartialCurrentStateTracker,
@@ -179,6 +180,7 @@ def _get_state_groups_from_groups(
179180

180181
return self.stores.state._get_state_groups_from_groups(groups, state_filter)
181182

183+
@trace
182184
async def get_state_for_events(
183185
self, event_ids: Collection[str], state_filter: Optional[StateFilter] = None
184186
) -> Dict[str, StateMap[EventBase]]:
@@ -225,6 +227,7 @@ async def get_state_for_events(
225227

226228
return {event: event_to_state[event] for event in event_ids}
227229

230+
@trace
228231
async def get_state_ids_for_events(
229232
self,
230233
event_ids: Collection[str],
@@ -287,6 +290,7 @@ async def get_state_for_event(
287290
)
288291
return state_map[event_id]
289292

293+
@trace
290294
async def get_state_ids_for_event(
291295
self, event_id: str, state_filter: Optional[StateFilter] = None
292296
) -> StateMap[str]:
@@ -327,6 +331,7 @@ def get_state_for_groups(
327331
groups, state_filter or StateFilter.all()
328332
)
329333

334+
@trace
330335
async def get_state_group_for_events(
331336
self,
332337
event_ids: Collection[str],

synapse/storage/databases/main/stream.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
from synapse.api.filtering import Filter
5959
from synapse.events import EventBase
6060
from synapse.logging.context import make_deferred_yieldable, run_in_background
61+
from synapse.logging.opentracing import trace
6162
from synapse.storage._base import SQLBaseStore
6263
from synapse.storage.database import (
6364
DatabasePool,
@@ -1346,6 +1347,7 @@ def _paginate_room_events_txn(
13461347

13471348
return rows, next_token
13481349

1350+
@trace
13491351
async def paginate_room_events(
13501352
self,
13511353
room_id: str,

synapse/streams/events.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
from synapse.handlers.receipts import ReceiptEventSource
2222
from synapse.handlers.room import RoomEventSource
2323
from synapse.handlers.typing import TypingNotificationEventSource
24+
from synapse.logging.opentracing import trace
2425
from synapse.streams import EventSource
2526
from synapse.types import StreamToken
2627

@@ -69,6 +70,7 @@ def get_current_token(self) -> StreamToken:
6970
)
7071
return token
7172

73+
@trace
7274
async def get_current_token_for_pagination(self, room_id: str) -> StreamToken:
7375
"""Get the current token for a given room to be used to paginate
7476
events.

0 commit comments

Comments
 (0)