mirror of
				https://github.com/matrix-org/synapse.git
				synced 2025-10-30 19:58:36 +00:00 
			
		
		
		
	Faster room joins: Avoid blocking /keys/changes (#13888)
				
					
				
			Part of the work for #12993. Once #12993 is fully resolved, we expect `/keys/changes` to behave sensibly when joined to a room with partial state. Signed-off-by: Sean Quah <seanq@matrix.org>
This commit is contained in:
		
							parent
							
								
									db868db594
								
							
						
					
					
						commit
						f49f73c0da
					
				
							
								
								
									
										1
									
								
								changelog.d/13888.misc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								changelog.d/13888.misc
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | Faster room joins: Avoid waiting for full state when processing `/keys/changes` requests. | ||||||
| @ -195,7 +195,9 @@ class DeviceWorkerHandler: | |||||||
|         possibly_changed = set(changed) |         possibly_changed = set(changed) | ||||||
|         possibly_left = set() |         possibly_left = set() | ||||||
|         for room_id in rooms_changed: |         for room_id in rooms_changed: | ||||||
|             current_state_ids = await self._state_storage.get_current_state_ids(room_id) |             current_state_ids = await self._state_storage.get_current_state_ids( | ||||||
|  |                 room_id, await_full_state=False | ||||||
|  |             ) | ||||||
| 
 | 
 | ||||||
|             # The user may have left the room |             # The user may have left the room | ||||||
|             # TODO: Check if they actually did or if we were just invited. |             # TODO: Check if they actually did or if we were just invited. | ||||||
| @ -234,7 +236,8 @@ class DeviceWorkerHandler: | |||||||
| 
 | 
 | ||||||
|             # mapping from event_id -> state_dict |             # mapping from event_id -> state_dict | ||||||
|             prev_state_ids = await self._state_storage.get_state_ids_for_events( |             prev_state_ids = await self._state_storage.get_state_ids_for_events( | ||||||
|                 event_ids |                 event_ids, | ||||||
|  |                 await_full_state=False, | ||||||
|             ) |             ) | ||||||
| 
 | 
 | ||||||
|             # Check if we've joined the room? If so we just blindly add all the users to |             # Check if we've joined the room? If so we just blindly add all the users to | ||||||
|  | |||||||
| @ -407,6 +407,7 @@ class StateStorageController: | |||||||
|         self, |         self, | ||||||
|         room_id: str, |         room_id: str, | ||||||
|         state_filter: Optional[StateFilter] = None, |         state_filter: Optional[StateFilter] = None, | ||||||
|  |         await_full_state: bool = True, | ||||||
|         on_invalidate: Optional[Callable[[], None]] = None, |         on_invalidate: Optional[Callable[[], None]] = None, | ||||||
|     ) -> StateMap[str]: |     ) -> StateMap[str]: | ||||||
|         """Get the current state event ids for a room based on the |         """Get the current state event ids for a room based on the | ||||||
| @ -419,13 +420,17 @@ class StateStorageController: | |||||||
|             room_id: The room to get the state IDs of. state_filter: The state |             room_id: The room to get the state IDs of. state_filter: The state | ||||||
|             filter used to fetch state from the |             filter used to fetch state from the | ||||||
|                 database. |                 database. | ||||||
|  |             await_full_state: if true, will block if we do not yet have complete | ||||||
|  |                state for the room. | ||||||
|             on_invalidate: Callback for when the `get_current_state_ids` cache |             on_invalidate: Callback for when the `get_current_state_ids` cache | ||||||
|                 for the room gets invalidated. |                 for the room gets invalidated. | ||||||
| 
 | 
 | ||||||
|         Returns: |         Returns: | ||||||
|             The current state of the room. |             The current state of the room. | ||||||
|         """ |         """ | ||||||
|         if not state_filter or state_filter.must_await_full_state(self._is_mine_id): |         if await_full_state and ( | ||||||
|  |             not state_filter or state_filter.must_await_full_state(self._is_mine_id) | ||||||
|  |         ): | ||||||
|             await self._partial_state_room_tracker.await_full_state(room_id) |             await self._partial_state_room_tracker.await_full_state(room_id) | ||||||
| 
 | 
 | ||||||
|         if state_filter and not state_filter.is_full(): |         if state_filter and not state_filter.is_full(): | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user