mirror of
				https://github.com/matrix-org/synapse.git
				synced 2025-11-04 02:01:03 +01:00 
			
		
		
		
	Merge pull request #2643 from matrix-org/matthew/user_dir_typos
Fix various embarrassing typos around user_directory and add some doc.
This commit is contained in:
		
						commit
						228ccf1fe3
					
				
							
								
								
									
										17
									
								
								docs/user_directory.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								docs/user_directory.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,17 @@
 | 
				
			|||||||
 | 
					User Directory API Implementation
 | 
				
			||||||
 | 
					=================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The user directory is currently maintained based on the 'visible' users
 | 
				
			||||||
 | 
					on this particular server - i.e. ones which your account shares a room with, or
 | 
				
			||||||
 | 
					who are present in a publicly viewable room present on the server.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The directory info is stored in various tables, which can (typically after
 | 
				
			||||||
 | 
					DB corruption) get stale or out of sync.  If this happens, for now the
 | 
				
			||||||
 | 
					quickest solution to fix it is:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					UPDATE user_directory_stream_pos SET stream_id = NULL;
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					and restart the synapse, which should then start a background task to
 | 
				
			||||||
 | 
					flush the current tables and regenerate the directory.
 | 
				
			||||||
@ -152,7 +152,7 @@ class UserDirectoyHandler(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        for room_id in room_ids:
 | 
					        for room_id in room_ids:
 | 
				
			||||||
            logger.info("Handling room %d/%d", num_processed_rooms, len(room_ids))
 | 
					            logger.info("Handling room %d/%d", num_processed_rooms, len(room_ids))
 | 
				
			||||||
            yield self._handle_intial_room(room_id)
 | 
					            yield self._handle_initial_room(room_id)
 | 
				
			||||||
            num_processed_rooms += 1
 | 
					            num_processed_rooms += 1
 | 
				
			||||||
            yield sleep(self.INITIAL_SLEEP_MS / 1000.)
 | 
					            yield sleep(self.INITIAL_SLEEP_MS / 1000.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -166,7 +166,7 @@ class UserDirectoyHandler(object):
 | 
				
			|||||||
        yield self.store.update_user_directory_stream_pos(new_pos)
 | 
					        yield self.store.update_user_directory_stream_pos(new_pos)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @defer.inlineCallbacks
 | 
					    @defer.inlineCallbacks
 | 
				
			||||||
    def _handle_intial_room(self, room_id):
 | 
					    def _handle_initial_room(self, room_id):
 | 
				
			||||||
        """Called when we initially fill out user_directory one room at a time
 | 
					        """Called when we initially fill out user_directory one room at a time
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        is_in_room = yield self.store.is_host_joined(room_id, self.server_name)
 | 
					        is_in_room = yield self.store.is_host_joined(room_id, self.server_name)
 | 
				
			||||||
 | 
				
			|||||||
@ -29,5 +29,5 @@ CREATE INDEX users_who_share_rooms_r_idx ON users_who_share_rooms(room_id);
 | 
				
			|||||||
CREATE INDEX users_who_share_rooms_o_idx ON users_who_share_rooms(other_user_id);
 | 
					CREATE INDEX users_who_share_rooms_o_idx ON users_who_share_rooms(other_user_id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- Make sure that we popualte the table initially
 | 
					-- Make sure that we populate the table initially
 | 
				
			||||||
UPDATE user_directory_stream_pos SET stream_id = NULL;
 | 
					UPDATE user_directory_stream_pos SET stream_id = NULL;
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
/* Copyright 2017 Vector Creations Ltd
 | 
					/* Copyright 2017 New Vector Ltd
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
					 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 * you may not use this file except in compliance with the License.
 | 
					 * you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										24
									
								
								synapse/storage/schema/delta/46/user_dir_typos.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								synapse/storage/schema/delta/46/user_dir_typos.sql
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,24 @@
 | 
				
			|||||||
 | 
					/* Copyright 2017 New Vector Ltd
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 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.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- this is just embarassing :|
 | 
				
			||||||
 | 
					ALTER TABLE users_in_pubic_room RENAME TO users_in_public_rooms;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- this is only 300K rows on matrix.org and takes ~3s to generate the index,
 | 
				
			||||||
 | 
					-- so is hopefully not going to block anyone else for that long...
 | 
				
			||||||
 | 
					CREATE INDEX users_in_public_rooms_room_idx ON users_in_public_rooms(room_id);
 | 
				
			||||||
 | 
					CREATE UNIQUE INDEX users_in_public_rooms_user_idx ON users_in_public_rooms(user_id);
 | 
				
			||||||
 | 
					DROP INDEX users_in_pubic_room_room_idx;
 | 
				
			||||||
 | 
					DROP INDEX users_in_pubic_room_user_idx;
 | 
				
			||||||
@ -63,7 +63,7 @@ class UserDirectoryStore(SQLBaseStore):
 | 
				
			|||||||
            user_ids (list(str)): Users to add
 | 
					            user_ids (list(str)): Users to add
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        yield self._simple_insert_many(
 | 
					        yield self._simple_insert_many(
 | 
				
			||||||
            table="users_in_pubic_room",
 | 
					            table="users_in_public_rooms",
 | 
				
			||||||
            values=[
 | 
					            values=[
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    "user_id": user_id,
 | 
					                    "user_id": user_id,
 | 
				
			||||||
@ -219,7 +219,7 @@ class UserDirectoryStore(SQLBaseStore):
 | 
				
			|||||||
    @defer.inlineCallbacks
 | 
					    @defer.inlineCallbacks
 | 
				
			||||||
    def update_user_in_public_user_list(self, user_id, room_id):
 | 
					    def update_user_in_public_user_list(self, user_id, room_id):
 | 
				
			||||||
        yield self._simple_update_one(
 | 
					        yield self._simple_update_one(
 | 
				
			||||||
            table="users_in_pubic_room",
 | 
					            table="users_in_public_rooms",
 | 
				
			||||||
            keyvalues={"user_id": user_id},
 | 
					            keyvalues={"user_id": user_id},
 | 
				
			||||||
            updatevalues={"room_id": room_id},
 | 
					            updatevalues={"room_id": room_id},
 | 
				
			||||||
            desc="update_user_in_public_user_list",
 | 
					            desc="update_user_in_public_user_list",
 | 
				
			||||||
@ -240,7 +240,7 @@ class UserDirectoryStore(SQLBaseStore):
 | 
				
			|||||||
            )
 | 
					            )
 | 
				
			||||||
            self._simple_delete_txn(
 | 
					            self._simple_delete_txn(
 | 
				
			||||||
                txn,
 | 
					                txn,
 | 
				
			||||||
                table="users_in_pubic_room",
 | 
					                table="users_in_public_rooms",
 | 
				
			||||||
                keyvalues={"user_id": user_id},
 | 
					                keyvalues={"user_id": user_id},
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
            txn.call_after(
 | 
					            txn.call_after(
 | 
				
			||||||
@ -256,7 +256,7 @@ class UserDirectoryStore(SQLBaseStore):
 | 
				
			|||||||
    @defer.inlineCallbacks
 | 
					    @defer.inlineCallbacks
 | 
				
			||||||
    def remove_from_user_in_public_room(self, user_id):
 | 
					    def remove_from_user_in_public_room(self, user_id):
 | 
				
			||||||
        yield self._simple_delete(
 | 
					        yield self._simple_delete(
 | 
				
			||||||
            table="users_in_pubic_room",
 | 
					            table="users_in_public_rooms",
 | 
				
			||||||
            keyvalues={"user_id": user_id},
 | 
					            keyvalues={"user_id": user_id},
 | 
				
			||||||
            desc="remove_from_user_in_public_room",
 | 
					            desc="remove_from_user_in_public_room",
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
@ -267,7 +267,7 @@ class UserDirectoryStore(SQLBaseStore):
 | 
				
			|||||||
        in the given room_id
 | 
					        in the given room_id
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        return self._simple_select_onecol(
 | 
					        return self._simple_select_onecol(
 | 
				
			||||||
            table="users_in_pubic_room",
 | 
					            table="users_in_public_rooms",
 | 
				
			||||||
            keyvalues={"room_id": room_id},
 | 
					            keyvalues={"room_id": room_id},
 | 
				
			||||||
            retcol="user_id",
 | 
					            retcol="user_id",
 | 
				
			||||||
            desc="get_users_in_public_due_to_room",
 | 
					            desc="get_users_in_public_due_to_room",
 | 
				
			||||||
@ -286,7 +286,7 @@ class UserDirectoryStore(SQLBaseStore):
 | 
				
			|||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        user_ids_pub = yield self._simple_select_onecol(
 | 
					        user_ids_pub = yield self._simple_select_onecol(
 | 
				
			||||||
            table="users_in_pubic_room",
 | 
					            table="users_in_public_rooms",
 | 
				
			||||||
            keyvalues={"room_id": room_id},
 | 
					            keyvalues={"room_id": room_id},
 | 
				
			||||||
            retcol="user_id",
 | 
					            retcol="user_id",
 | 
				
			||||||
            desc="get_users_in_dir_due_to_room",
 | 
					            desc="get_users_in_dir_due_to_room",
 | 
				
			||||||
@ -514,7 +514,7 @@ class UserDirectoryStore(SQLBaseStore):
 | 
				
			|||||||
        def _delete_all_from_user_dir_txn(txn):
 | 
					        def _delete_all_from_user_dir_txn(txn):
 | 
				
			||||||
            txn.execute("DELETE FROM user_directory")
 | 
					            txn.execute("DELETE FROM user_directory")
 | 
				
			||||||
            txn.execute("DELETE FROM user_directory_search")
 | 
					            txn.execute("DELETE FROM user_directory_search")
 | 
				
			||||||
            txn.execute("DELETE FROM users_in_pubic_room")
 | 
					            txn.execute("DELETE FROM users_in_public_rooms")
 | 
				
			||||||
            txn.execute("DELETE FROM users_who_share_rooms")
 | 
					            txn.execute("DELETE FROM users_who_share_rooms")
 | 
				
			||||||
            txn.call_after(self.get_user_in_directory.invalidate_all)
 | 
					            txn.call_after(self.get_user_in_directory.invalidate_all)
 | 
				
			||||||
            txn.call_after(self.get_user_in_public_room.invalidate_all)
 | 
					            txn.call_after(self.get_user_in_public_room.invalidate_all)
 | 
				
			||||||
@ -537,7 +537,7 @@ class UserDirectoryStore(SQLBaseStore):
 | 
				
			|||||||
    @cached()
 | 
					    @cached()
 | 
				
			||||||
    def get_user_in_public_room(self, user_id):
 | 
					    def get_user_in_public_room(self, user_id):
 | 
				
			||||||
        return self._simple_select_one(
 | 
					        return self._simple_select_one(
 | 
				
			||||||
            table="users_in_pubic_room",
 | 
					            table="users_in_public_rooms",
 | 
				
			||||||
            keyvalues={"user_id": user_id},
 | 
					            keyvalues={"user_id": user_id},
 | 
				
			||||||
            retcols=("room_id",),
 | 
					            retcols=("room_id",),
 | 
				
			||||||
            allow_none=True,
 | 
					            allow_none=True,
 | 
				
			||||||
@ -641,7 +641,7 @@ class UserDirectoryStore(SQLBaseStore):
 | 
				
			|||||||
                SELECT d.user_id, display_name, avatar_url
 | 
					                SELECT d.user_id, display_name, avatar_url
 | 
				
			||||||
                FROM user_directory_search
 | 
					                FROM user_directory_search
 | 
				
			||||||
                INNER JOIN user_directory AS d USING (user_id)
 | 
					                INNER JOIN user_directory AS d USING (user_id)
 | 
				
			||||||
                LEFT JOIN users_in_pubic_room AS p USING (user_id)
 | 
					                LEFT JOIN users_in_public_rooms AS p USING (user_id)
 | 
				
			||||||
                LEFT JOIN (
 | 
					                LEFT JOIN (
 | 
				
			||||||
                    SELECT other_user_id AS user_id FROM users_who_share_rooms
 | 
					                    SELECT other_user_id AS user_id FROM users_who_share_rooms
 | 
				
			||||||
                    WHERE user_id = ? AND share_private
 | 
					                    WHERE user_id = ? AND share_private
 | 
				
			||||||
@ -680,7 +680,7 @@ class UserDirectoryStore(SQLBaseStore):
 | 
				
			|||||||
                SELECT d.user_id, display_name, avatar_url
 | 
					                SELECT d.user_id, display_name, avatar_url
 | 
				
			||||||
                FROM user_directory_search
 | 
					                FROM user_directory_search
 | 
				
			||||||
                INNER JOIN user_directory AS d USING (user_id)
 | 
					                INNER JOIN user_directory AS d USING (user_id)
 | 
				
			||||||
                LEFT JOIN users_in_pubic_room AS p USING (user_id)
 | 
					                LEFT JOIN users_in_public_rooms AS p USING (user_id)
 | 
				
			||||||
                LEFT JOIN (
 | 
					                LEFT JOIN (
 | 
				
			||||||
                    SELECT other_user_id AS user_id FROM users_who_share_rooms
 | 
					                    SELECT other_user_id AS user_id FROM users_who_share_rooms
 | 
				
			||||||
                    WHERE user_id = ? AND share_private
 | 
					                    WHERE user_id = ? AND share_private
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user