mirror of
https://github.com/element-hq/synapse.git
synced 2024-12-14 11:57:44 +00:00
Add parameter to control whether we do a partial state join (#14843)
When the local homeserver is already joined to a room and wants to perform another remote join, we may find it useful to do a non-partial state join if we already have the full state for the room. Signed-off-by: Sean Quah <seanq@matrix.org>
This commit is contained in:
parent
4db3331bb9
commit
db5145a31d
3 changed files with 24 additions and 5 deletions
1
changelog.d/14843.misc
Normal file
1
changelog.d/14843.misc
Normal file
|
@ -0,0 +1 @@
|
|||
Add a parameter to control whether the federation client performs a partial state join.
|
|
@ -1014,7 +1014,11 @@ class FederationClient(FederationBase):
|
|||
)
|
||||
|
||||
async def send_join(
|
||||
self, destinations: Iterable[str], pdu: EventBase, room_version: RoomVersion
|
||||
self,
|
||||
destinations: Iterable[str],
|
||||
pdu: EventBase,
|
||||
room_version: RoomVersion,
|
||||
partial_state: bool = True,
|
||||
) -> SendJoinResult:
|
||||
"""Sends a join event to one of a list of homeservers.
|
||||
|
||||
|
@ -1027,6 +1031,10 @@ class FederationClient(FederationBase):
|
|||
pdu: event to be sent
|
||||
room_version: the version of the room (according to the server that
|
||||
did the make_join)
|
||||
partial_state: whether to ask the remote server to omit membership state
|
||||
events from the response. If the remote server complies,
|
||||
`partial_state` in the send join result will be set. Defaults to
|
||||
`True`.
|
||||
|
||||
Returns:
|
||||
The result of the send join request.
|
||||
|
@ -1037,7 +1045,9 @@ class FederationClient(FederationBase):
|
|||
"""
|
||||
|
||||
async def send_request(destination: str) -> SendJoinResult:
|
||||
response = await self._do_send_join(room_version, destination, pdu)
|
||||
response = await self._do_send_join(
|
||||
room_version, destination, pdu, omit_members=partial_state
|
||||
)
|
||||
|
||||
# If an event was returned (and expected to be returned):
|
||||
#
|
||||
|
@ -1177,7 +1187,11 @@ class FederationClient(FederationBase):
|
|||
)
|
||||
|
||||
async def _do_send_join(
|
||||
self, room_version: RoomVersion, destination: str, pdu: EventBase
|
||||
self,
|
||||
room_version: RoomVersion,
|
||||
destination: str,
|
||||
pdu: EventBase,
|
||||
omit_members: bool,
|
||||
) -> SendJoinResponse:
|
||||
time_now = self._clock.time_msec()
|
||||
|
||||
|
@ -1188,6 +1202,7 @@ class FederationClient(FederationBase):
|
|||
room_id=pdu.room_id,
|
||||
event_id=pdu.event_id,
|
||||
content=pdu.get_pdu_json(time_now),
|
||||
omit_members=omit_members,
|
||||
)
|
||||
except HttpResponseException as e:
|
||||
# If an error is received that is due to an unrecognised endpoint,
|
||||
|
|
|
@ -351,13 +351,16 @@ class TransportLayerClient:
|
|||
room_id: str,
|
||||
event_id: str,
|
||||
content: JsonDict,
|
||||
omit_members: bool,
|
||||
) -> "SendJoinResponse":
|
||||
path = _create_v2_path("/send_join/%s/%s", room_id, event_id)
|
||||
query_params: Dict[str, str] = {}
|
||||
if self._faster_joins_enabled:
|
||||
# lazy-load state on join
|
||||
query_params["org.matrix.msc3706.partial_state"] = "true"
|
||||
query_params["omit_members"] = "true"
|
||||
query_params["org.matrix.msc3706.partial_state"] = (
|
||||
"true" if omit_members else "false"
|
||||
)
|
||||
query_params["omit_members"] = "true" if omit_members else "false"
|
||||
|
||||
return await self.client.put_json(
|
||||
destination=destination,
|
||||
|
|
Loading…
Reference in a new issue