mirror of
https://git.anonymousland.org/anonymousland/synapse-product.git
synced 2024-09-07 21:42:00 +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
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(
|
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:
|
) -> SendJoinResult:
|
||||||
"""Sends a join event to one of a list of homeservers.
|
"""Sends a join event to one of a list of homeservers.
|
||||||
|
|
||||||
@ -1027,6 +1031,10 @@ class FederationClient(FederationBase):
|
|||||||
pdu: event to be sent
|
pdu: event to be sent
|
||||||
room_version: the version of the room (according to the server that
|
room_version: the version of the room (according to the server that
|
||||||
did the make_join)
|
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:
|
Returns:
|
||||||
The result of the send join request.
|
The result of the send join request.
|
||||||
@ -1037,7 +1045,9 @@ class FederationClient(FederationBase):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
async def send_request(destination: str) -> SendJoinResult:
|
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):
|
# If an event was returned (and expected to be returned):
|
||||||
#
|
#
|
||||||
@ -1177,7 +1187,11 @@ class FederationClient(FederationBase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
async def _do_send_join(
|
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:
|
) -> SendJoinResponse:
|
||||||
time_now = self._clock.time_msec()
|
time_now = self._clock.time_msec()
|
||||||
|
|
||||||
@ -1188,6 +1202,7 @@ class FederationClient(FederationBase):
|
|||||||
room_id=pdu.room_id,
|
room_id=pdu.room_id,
|
||||||
event_id=pdu.event_id,
|
event_id=pdu.event_id,
|
||||||
content=pdu.get_pdu_json(time_now),
|
content=pdu.get_pdu_json(time_now),
|
||||||
|
omit_members=omit_members,
|
||||||
)
|
)
|
||||||
except HttpResponseException as e:
|
except HttpResponseException as e:
|
||||||
# If an error is received that is due to an unrecognised endpoint,
|
# If an error is received that is due to an unrecognised endpoint,
|
||||||
|
@ -351,13 +351,16 @@ class TransportLayerClient:
|
|||||||
room_id: str,
|
room_id: str,
|
||||||
event_id: str,
|
event_id: str,
|
||||||
content: JsonDict,
|
content: JsonDict,
|
||||||
|
omit_members: bool,
|
||||||
) -> "SendJoinResponse":
|
) -> "SendJoinResponse":
|
||||||
path = _create_v2_path("/send_join/%s/%s", room_id, event_id)
|
path = _create_v2_path("/send_join/%s/%s", room_id, event_id)
|
||||||
query_params: Dict[str, str] = {}
|
query_params: Dict[str, str] = {}
|
||||||
if self._faster_joins_enabled:
|
if self._faster_joins_enabled:
|
||||||
# lazy-load state on join
|
# lazy-load state on join
|
||||||
query_params["org.matrix.msc3706.partial_state"] = "true"
|
query_params["org.matrix.msc3706.partial_state"] = (
|
||||||
query_params["omit_members"] = "true"
|
"true" if omit_members else "false"
|
||||||
|
)
|
||||||
|
query_params["omit_members"] = "true" if omit_members else "false"
|
||||||
|
|
||||||
return await self.client.put_json(
|
return await self.client.put_json(
|
||||||
destination=destination,
|
destination=destination,
|
||||||
|
Loading…
Reference in New Issue
Block a user