瀏覽代碼

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>
tags/v1.76.0rc1
Sean Quah 1 年之前
committed by GitHub
父節點
當前提交
db5145a31d
沒有發現已知的金鑰在資料庫的簽署中 GPG Key ID: 4AEE18F83AFDEB23
共有 3 個文件被更改,包括 24 次插入5 次删除
  1. +1
    -0
      changelog.d/14843.misc
  2. +18
    -3
      synapse/federation/federation_client.py
  3. +5
    -2
      synapse/federation/transport/client.py

+ 1
- 0
changelog.d/14843.misc 查看文件

@@ -0,0 +1 @@
Add a parameter to control whether the federation client performs a partial state join.

+ 18
- 3
synapse/federation/federation_client.py 查看文件

@@ -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,


+ 5
- 2
synapse/federation/transport/client.py 查看文件

@@ -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…
取消
儲存