-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Add forgotten status to Room Details API #13503
Changes from 5 commits
6d4ef60
5071934
2f9c6a2
f09613f
1a2e96d
8fa7eb8
03efe4c
3ff3656
7fc1185
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Add forgotten status to Room Details API. |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -1212,6 +1212,30 @@ def _get_forgotten_rooms_for_user_txn(txn: LoggingTransaction) -> Set[str]: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"get_forgotten_rooms_for_user", _get_forgotten_rooms_for_user_txn | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
async def is_locally_forgotten_room(self, room_id: str) -> bool: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"""Returns whether all local users have forgotten this room_id. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Args: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
room_id: The room ID to query. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Returns: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Whether the room is forgotten. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sql = """ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SELECT count(*) FROM local_current_membership | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
INNER JOIN room_memberships USING (room_id, event_id) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
WHERE | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
room_id = ? | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
AND forgotten = 0; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Drive-by comment: it might(?) be more performant to (There's also an index There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. synapse/synapse/storage/databases/main/roommember.py Lines 1188 to 1207 in 8fa7eb8
This looks similar, but is very complicated. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I try to create a better sql query. I am feeling in a rabbit hole. It seems that Synapse is not possible to forget a room, at the moment. I think there is a bug in: synapse/synapse/handlers/room_member.py Lines 1912 to 1927 in e825f73
There is a gap of unit tests. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Proposal for an other query: SELECT room_id, (
SELECT count(*) > 0 FROM room_memberships
WHERE room_id = m.room_id AND forgotten = 0
) AS count
FROM room_memberships AS m
WHERE room_id = ? AND forgotten = 1
GROUP BY room_id; Steps
Results
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The query plan looks sensible to me |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
rows = await self.db_pool.execute("is_forgotten_room", None, sql, room_id) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# `count(*)` returns always an integer | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# If any rows still exist it means someone has not forgotten this room yet | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return not rows[0][0] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
async def get_rooms_user_has_been_in(self, user_id: str) -> Set[str]: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"""Get all rooms that the user has ever been in. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we should note that this was added in Synapse 1.66. I'll add something to this file now while preparing the release.