mirror of
https://mau.dev/maunium/synapse.git
synced 2024-12-14 12:03:50 +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
6 changed files with 55 additions and 14 deletions
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…
Reference in a new issue