Speed up membership queries for users with forgotten rooms (#15385)
							parent
							
								
									89a71e7390
								
							
						
					
					
						commit
						79d2e2e79c
					
				| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
Speed up membership queries for users with forgotten rooms.
 | 
			
		||||
| 
						 | 
				
			
			@ -419,6 +419,10 @@ class RoomMemberWorkerStore(EventsWorkerStore):
 | 
			
		|||
        )
 | 
			
		||||
 | 
			
		||||
        # Now we filter out forgotten and excluded rooms
 | 
			
		||||
        rooms_to_exclude: AbstractSet[str] = set()
 | 
			
		||||
 | 
			
		||||
        # Users can't forget joined/invited rooms, so we skip the check for such look ups.
 | 
			
		||||
        if any(m not in (Membership.JOIN, Membership.INVITE) for m in membership_list):
 | 
			
		||||
            rooms_to_exclude = await self.get_forgotten_rooms_for_user(user_id)
 | 
			
		||||
 | 
			
		||||
        if excluded_rooms is not None:
 | 
			
		||||
| 
						 | 
				
			
			@ -1391,6 +1395,12 @@ class RoomMemberBackgroundUpdateStore(SQLBaseStore):
 | 
			
		|||
            columns=["user_id", "room_id"],
 | 
			
		||||
            where_clause="forgotten = 1",
 | 
			
		||||
        )
 | 
			
		||||
        self.db_pool.updates.register_background_index_update(
 | 
			
		||||
            "room_membership_user_room_index",
 | 
			
		||||
            index_name="room_membership_user_room_idx",
 | 
			
		||||
            table="room_memberships",
 | 
			
		||||
            columns=["user_id", "room_id"],
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    async def _background_add_membership_profile(
 | 
			
		||||
        self, progress: JsonDict, batch_size: int
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,19 @@
 | 
			
		|||
/* Copyright 2023 The Matrix.org Foundation C.I.C
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
-- Add an index to `room_membership(user_id, room_id)` to make querying for
 | 
			
		||||
-- forgotten rooms faster.
 | 
			
		||||
INSERT INTO background_updates (ordering, update_name, progress_json) VALUES
 | 
			
		||||
    (7403, 'room_membership_user_room_index', '{}');
 | 
			
		||||
		Loading…
	
		Reference in New Issue