This repository has been archived by the owner on Apr 26, 2024. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Ensure fed-sender catchup does not block for full state #15248
Merged
Merged
Changes from 3 commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Fix a rare bug introduced in Synapse 1.73 where events could remain unsent to other homeservers after a faster-join to a room. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -497,8 +497,8 @@ async def _catch_up_transmission_loop(self) -> None: | |
# | ||
# Note: `catchup_pdus` will have exactly one PDU per room. | ||
for pdu in catchup_pdus: | ||
# The PDU from the DB will be the last PDU in the room from | ||
# *this server* that wasn't sent to the remote. However, other | ||
# The PDU from the DB will be the oldest PDU in the room from | ||
# *this server* that we tried---but were unable---to send to the remote. | ||
# servers may have sent lots of events since then, and we want | ||
# to try and tell the remote only about the *latest* events in | ||
# the room. This is so that it doesn't get inundated by events | ||
|
@@ -516,6 +516,11 @@ async def _catch_up_transmission_loop(self) -> None: | |
# If the event is in the extremities, then great! We can just | ||
# use that without having to do further checks. | ||
room_catchup_pdus = [pdu] | ||
elif self._store.is_partial_state_room(pdu.room_id): | ||
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. #14519 please |
||
# We can't be sure which events the destination should | ||
# see using only partial state. Avoid doing so, and just retry | ||
# sending our the oldest PDU the remote is missing from us. | ||
room_catchup_pdus = [pdu] | ||
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 think this makes sense after @reivilibre's explanation (modulo confusion about oldest vs newest). |
||
else: | ||
# If not, fetch the extremities and figure out which we can | ||
# send. | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.
My reading of @reivilibre's explanation was that catchup PDUs are the newest PDUs in each room that should have gone out, and we process rooms in order of oldest catchup PDUs first.