-
Notifications
You must be signed in to change notification settings - Fork 349
Use fully-qualified PersistedEventPosition
when returning RoomsForUser
#17265
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
271a196
4155e18
939695d
73c20d9
7b41f41
09638ac
cc35e42
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 @@ | ||
Use fully-qualified `PersistedEventPosition` when returning `RoomsForUser` to facilitate proper comparisons and `RoomStreamToken` generation. |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -126,13 +126,7 @@ async def export_user_data(self, user_id: str, writer: "ExfiltrationWriter") -> | |||||||||||||||||||||||||||||||||||||||||||
# Get all rooms the user is in or has been in | ||||||||||||||||||||||||||||||||||||||||||||
rooms = await self._store.get_rooms_for_local_user_where_membership_is( | ||||||||||||||||||||||||||||||||||||||||||||
user_id, | ||||||||||||||||||||||||||||||||||||||||||||
membership_list=( | ||||||||||||||||||||||||||||||||||||||||||||
Membership.JOIN, | ||||||||||||||||||||||||||||||||||||||||||||
Membership.LEAVE, | ||||||||||||||||||||||||||||||||||||||||||||
Membership.BAN, | ||||||||||||||||||||||||||||||||||||||||||||
Membership.INVITE, | ||||||||||||||||||||||||||||||||||||||||||||
Membership.KNOCK, | ||||||||||||||||||||||||||||||||||||||||||||
), | ||||||||||||||||||||||||||||||||||||||||||||
membership_list=Membership.LIST, | ||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
# We only try and fetch events for rooms the user has been in. If | ||||||||||||||||||||||||||||||||||||||||||||
|
@@ -179,7 +173,7 @@ async def export_user_data(self, user_id: str, writer: "ExfiltrationWriter") -> | |||||||||||||||||||||||||||||||||||||||||||
if room.membership == Membership.JOIN: | ||||||||||||||||||||||||||||||||||||||||||||
stream_ordering = self._store.get_room_max_stream_ordering() | ||||||||||||||||||||||||||||||||||||||||||||
else: | ||||||||||||||||||||||||||||||||||||||||||||
stream_ordering = room.stream_ordering | ||||||||||||||||||||||||||||||||||||||||||||
stream_ordering = room.event_pos.stream | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
from_key = RoomStreamToken(topological=0, stream=0) | ||||||||||||||||||||||||||||||||||||||||||||
to_key = RoomStreamToken(stream=stream_ordering) | ||||||||||||||||||||||||||||||||||||||||||||
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. On Relevant docs: synapse/synapse/types/__init__.py Lines 585 to 605 in 8a32700
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. hmm, actually I see both used: Ex. Perhaps, this just depends on whether the This isn't an initial vs incremental sync thing. It changes back-and-forth through the life-time of my sync loop. 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. Do we need to (should we) be more careful about crafting the I know in #17187, we talked about constructing the I'm racking my brain on each of these locations. My hunch, is that we should be pay closer attention and add the Is this something to push off to a more broad, holistic update to how we craft stream tokens everywhere? It's at least as good as it was before in any case. 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 know there was something recent about changing all of the streams to |
||||||||||||||||||||||||||||||||||||||||||||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -40,7 +40,6 @@ | |
) | ||
|
||
import attr | ||
from typing_extensions import TypedDict | ||
|
||
import synapse.events.snapshot | ||
from synapse.api.constants import ( | ||
|
@@ -81,6 +80,8 @@ | |
RoomAlias, | ||
RoomID, | ||
RoomStreamToken, | ||
ShutdownRoomParams, | ||
ShutdownRoomResponse, | ||
StateMap, | ||
StrCollection, | ||
StreamKeyType, | ||
|
@@ -1780,63 +1781,6 @@ def get_current_key_for_room(self, room_id: str) -> Awaitable[RoomStreamToken]: | |
return self.store.get_current_room_stream_token_for_room_id(room_id) | ||
|
||
|
||
class ShutdownRoomParams(TypedDict): | ||
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. Moving SYNAPSE_POSTGRES=1 SYNAPSE_POSTGRES_USER=postgres SYNAPSE_TEST_LOG_LEVEL=INFO poetry run trial tests.replication.storage.test_events
[...]
Traceback (most recent call last):
File "pypoetry/virtualenvs/matrix-synapse-xCtC9ulO-py3.12/lib/python3.12/site-packages/twisted/trial/runner.py", line 711, in loadByName
return self.suiteFactory([self.findByName(name, recurse=recurse)])
File "pypoetry/virtualenvs/matrix-synapse-xCtC9ulO-py3.12/lib/python3.12/site-packages/twisted/trial/runner.py", line 474, in findByName
obj = reflect.namedModule(searchName)
File "pypoetry/virtualenvs/matrix-synapse-xCtC9ulO-py3.12/lib/python3.12/site-packages/twisted/python/reflect.py", line 156, in namedModule
topLevel = __import__(name)
File "synapse/tests/replication/storage/test_events.py", line 33, in <module>
from synapse.handlers.room import RoomEventSource
File "synapse/synapse/handlers/room.py", line 74, in <module>
from synapse.rest.admin._base import assert_user_is_admin
File "synapse/synapse/rest/__init__.py", line 24, in <module>
from synapse.rest import admin
File "synapse/synapse/rest/admin/__init__.py", line 41, in <module>
from synapse.handlers.pagination import PURGE_HISTORY_ACTION_NAME
File "synapse/synapse/handlers/pagination.py", line 30, in <module>
from synapse.handlers.room import ShutdownRoomParams, ShutdownRoomResponse
builtins.ImportError: cannot import name 'ShutdownRoomParams' from partially initialized module 'synapse.handlers.room' (most likely due to a circular import) (synapse/synapse/handlers/room.py) |
||
""" | ||
Attributes: | ||
requester_user_id: | ||
User who requested the action. Will be recorded as putting the room on the | ||
blocking list. | ||
new_room_user_id: | ||
If set, a new room will be created with this user ID | ||
as the creator and admin, and all users in the old room will be | ||
moved into that room. If not set, no new room will be created | ||
and the users will just be removed from the old room. | ||
new_room_name: | ||
A string representing the name of the room that new users will | ||
be invited to. Defaults to `Content Violation Notification` | ||
message: | ||
A string containing the first message that will be sent as | ||
`new_room_user_id` in the new room. Ideally this will clearly | ||
convey why the original room was shut down. | ||
Defaults to `Sharing illegal content on this server is not | ||
permitted and rooms in violation will be blocked.` | ||
block: | ||
If set to `true`, this room will be added to a blocking list, | ||
preventing future attempts to join the room. Defaults to `false`. | ||
purge: | ||
If set to `true`, purge the given room from the database. | ||
force_purge: | ||
If set to `true`, the room will be purged from database | ||
even if there are still users joined to the room. | ||
""" | ||
|
||
requester_user_id: Optional[str] | ||
new_room_user_id: Optional[str] | ||
new_room_name: Optional[str] | ||
message: Optional[str] | ||
block: bool | ||
purge: bool | ||
force_purge: bool | ||
|
||
|
||
class ShutdownRoomResponse(TypedDict): | ||
""" | ||
Attributes: | ||
kicked_users: An array of users (`user_id`) that were kicked. | ||
failed_to_kick_users: | ||
An array of users (`user_id`) that that were not kicked. | ||
local_aliases: | ||
An array of strings representing the local aliases that were | ||
migrated from the old room to the new. | ||
new_room_id: A string representing the room ID of the new room. | ||
""" | ||
|
||
kicked_users: List[str] | ||
failed_to_kick_users: List[str] | ||
local_aliases: List[str] | ||
new_room_id: Optional[str] | ||
|
||
|
||
class RoomShutdownHandler: | ||
DEFAULT_MESSAGE = ( | ||
"Sharing illegal content on this server is not permitted and rooms in" | ||
|
Uh oh!
There was an error while loading. Please reload this page.