ソースを参照

Add spans for sync

Erik Johnston 3 年 前
コミット
ee223fc7b9
1 ファイル変更72 行追加54 行削除
  1. 72 54
      synapse/handlers/sync.py

+ 72 - 54
synapse/handlers/sync.py

@@ -1064,9 +1064,10 @@ class SyncHandler:
             # See https://github.com/matrix-org/matrix-doc/issues/1144
             raise NotImplementedError()
         else:
-            joined_room_ids = await self.get_rooms_for_user_at(
-                user_id, now_token.room_key
-            )
+            with start_active_span("get_rooms_for_user_at"):
+                joined_room_ids = await self.get_rooms_for_user_at(
+                    user_id, now_token.room_key
+                )
         sync_result_builder = SyncResultBuilder(
             sync_config,
             full_state,
@@ -1077,15 +1078,18 @@ class SyncHandler:
 
         logger.debug("Fetching account data")
 
-        account_data_by_room = await self._generate_sync_entry_for_account_data(
-            sync_result_builder
-        )
+        with start_active_span("_generate_sync_entry_for_account_data"):
+            account_data_by_room = await self._generate_sync_entry_for_account_data(
+                sync_result_builder
+            )
 
         logger.debug("Fetching room data")
 
-        res = await self._generate_sync_entry_for_rooms(
-            sync_result_builder, account_data_by_room
-        )
+        with start_active_span("_generate_sync_entry_for_rooms"):
+            res = await self._generate_sync_entry_for_rooms(
+                sync_result_builder, account_data_by_room
+            )
+
         newly_joined_rooms, newly_joined_or_invited_or_knocked_users, _, _ = res
         _, _, newly_left_rooms, newly_left_users = res
 
@@ -1094,22 +1098,25 @@ class SyncHandler:
         )
         if self.hs_config.server.use_presence and not block_all_presence_data:
             logger.debug("Fetching presence data")
-            await self._generate_sync_entry_for_presence(
-                sync_result_builder,
-                newly_joined_rooms,
-                newly_joined_or_invited_or_knocked_users,
-            )
+            with start_active_span("_generate_sync_entry_for_presence"):
+                await self._generate_sync_entry_for_presence(
+                    sync_result_builder,
+                    newly_joined_rooms,
+                    newly_joined_or_invited_or_knocked_users,
+                )
 
         logger.debug("Fetching to-device data")
-        await self._generate_sync_entry_for_to_device(sync_result_builder)
-
-        device_lists = await self._generate_sync_entry_for_device_list(
-            sync_result_builder,
-            newly_joined_rooms=newly_joined_rooms,
-            newly_joined_or_invited_or_knocked_users=newly_joined_or_invited_or_knocked_users,
-            newly_left_rooms=newly_left_rooms,
-            newly_left_users=newly_left_users,
-        )
+        with start_active_span("_generate_sync_entry_for_to_device"):
+            await self._generate_sync_entry_for_to_device(sync_result_builder)
+
+        with start_active_span("_generate_sync_entry_for_device_list"):
+            device_lists = await self._generate_sync_entry_for_device_list(
+                sync_result_builder,
+                newly_joined_rooms=newly_joined_rooms,
+                newly_joined_or_invited_or_knocked_users=newly_joined_or_invited_or_knocked_users,
+                newly_left_rooms=newly_left_rooms,
+                newly_left_users=newly_left_users,
+            )
 
         logger.debug("Fetching OTK data")
         device_id = sync_config.device_id
@@ -1120,15 +1127,19 @@ class SyncHandler:
             #   * no change in OTK count since the provided since token
             #   * the server has zero OTKs left for this device
             #  Spec issue: https://github.com/matrix-org/matrix-doc/issues/3298
-            one_time_key_counts = await self.store.count_e2e_one_time_keys(
-                user_id, device_id
-            )
-            unused_fallback_key_types = (
-                await self.store.get_e2e_unused_fallback_key_types(user_id, device_id)
-            )
+            with start_active_span("count_e2e_one_time_keys"):
+                one_time_key_counts = await self.store.count_e2e_one_time_keys(
+                    user_id, device_id
+                )
+                unused_fallback_key_types = (
+                    await self.store.get_e2e_unused_fallback_key_types(
+                        user_id, device_id
+                    )
+                )
 
         logger.debug("Fetching group data")
-        await self._generate_sync_entry_for_groups(sync_result_builder)
+        with start_active_span("_generate_sync_entry_for_groups"):
+            await self._generate_sync_entry_for_groups(sync_result_builder)
 
         num_events = 0
 
@@ -1478,12 +1489,13 @@ class SyncHandler:
         if block_all_room_ephemeral:
             ephemeral_by_room: Dict[str, List[JsonDict]] = {}
         else:
-            now_token, ephemeral_by_room = await self.ephemeral_by_room(
-                sync_result_builder,
-                now_token=sync_result_builder.now_token,
-                since_token=sync_result_builder.since_token,
-            )
-            sync_result_builder.now_token = now_token
+            with start_active_span("ephemeral_by_room"):
+                now_token, ephemeral_by_room = await self.ephemeral_by_room(
+                    sync_result_builder,
+                    now_token=sync_result_builder.now_token,
+                    since_token=sync_result_builder.since_token,
+                )
+                sync_result_builder.now_token = now_token
 
         # We check up front if anything has changed, if it hasn't then there is
         # no point in going further.
@@ -1493,18 +1505,20 @@ class SyncHandler:
                 have_changed = await self._have_rooms_changed(sync_result_builder)
                 log_kv({"rooms_have_changed": have_changed})
                 if not have_changed:
-                    tags_by_room = await self.store.get_updated_tags(
-                        user_id, since_token.account_data_key
-                    )
-                    if not tags_by_room:
-                        logger.debug("no-oping sync")
-                        return set(), set(), set(), set()
-
-        ignored_account_data = (
-            await self.store.get_global_account_data_by_type_for_user(
-                AccountDataTypes.IGNORED_USER_LIST, user_id=user_id
+                    with start_active_span("get_updated_tags"):
+                        tags_by_room = await self.store.get_updated_tags(
+                            user_id, since_token.account_data_key
+                        )
+                        if not tags_by_room:
+                            logger.debug("no-oping sync")
+                            return set(), set(), set(), set()
+
+        with start_active_span("get_global_account_data_by_type_for_user"):
+            ignored_account_data = (
+                await self.store.get_global_account_data_by_type_for_user(
+                    AccountDataTypes.IGNORED_USER_LIST, user_id=user_id
+                )
             )
-        )
 
         # If there is ignored users account data and it matches the proper type,
         # then use it.
@@ -1515,12 +1529,15 @@ class SyncHandler:
                 ignored_users = frozenset(ignored_users_data.keys())
 
         if since_token:
-            room_changes = await self._get_rooms_changed(
-                sync_result_builder, ignored_users
-            )
-            tags_by_room = await self.store.get_updated_tags(
-                user_id, since_token.account_data_key
-            )
+            with start_active_span("_get_rooms_changed"):
+                room_changes = await self._get_rooms_changed(
+                    sync_result_builder, ignored_users
+                )
+
+            with start_active_span("get_updated_tags"):
+                tags_by_room = await self.store.get_updated_tags(
+                    user_id, since_token.account_data_key
+                )
         else:
             room_changes = await self._get_all_rooms(sync_result_builder, ignored_users)
 
@@ -1547,7 +1564,8 @@ class SyncHandler:
             )
             logger.debug("Generated room entry for %s", room_entry.room_id)
 
-        await concurrently_execute(handle_room_entries, room_entries, 10)
+        with start_active_span("handle_room_entries"):
+            await concurrently_execute(handle_room_entries, room_entries, 10)
 
         sync_result_builder.invited.extend(invited)
         sync_result_builder.knocked.extend(knocked)