diff options
author | Erik Johnston <erikj@matrix.org> | 2023-11-16 13:05:09 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-16 13:05:09 +0000 |
commit | fef08cbee8d0bc47262bc479500ce31bb430cc47 (patch) | |
tree | 949f2190df731dd5d9e05ebc9ef6a15a57f0c165 /tests/replication/tcp | |
parent | More efficiently handle no-op POSITION (#16640) (diff) | |
download | synapse-fef08cbee8d0bc47262bc479500ce31bb430cc47.tar.xz |
Fix sending out of order `POSITION` over replication (#16639)
If a worker reconnects to Redis we send out the current positions of all our streams. However, if we're also trying to send out a backlog of RDATA at the same time then we can end up sending a `POSITION` with the current token *before* we've sent all the RDATA before the current token. This doesn't cause actual bugs as the receiving servers see the POSITION, fetch the relevant rows from the DB, and then ignore the old RDATA as they come in. However, this is inefficient so it'd be better if we didn't send out-of-order positions
Diffstat (limited to 'tests/replication/tcp')
-rw-r--r-- | tests/replication/tcp/streams/test_typing.py | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/tests/replication/tcp/streams/test_typing.py b/tests/replication/tcp/streams/test_typing.py index 5a38ac831f..20b3d431ba 100644 --- a/tests/replication/tcp/streams/test_typing.py +++ b/tests/replication/tcp/streams/test_typing.py @@ -35,6 +35,10 @@ class TypingStreamTestCase(BaseStreamTestCase): typing = self.hs.get_typing_handler() assert isinstance(typing, TypingWriterHandler) + # Create a typing update before we reconnect so that there is a missing + # update to fetch. + typing._push_update(member=RoomMember(ROOM_ID, USER_ID), typing=True) + self.reconnect() typing._push_update(member=RoomMember(ROOM_ID, USER_ID), typing=True) @@ -91,6 +95,10 @@ class TypingStreamTestCase(BaseStreamTestCase): typing = self.hs.get_typing_handler() assert isinstance(typing, TypingWriterHandler) + # Create a typing update before we reconnect so that there is a missing + # update to fetch. + typing._push_update(member=RoomMember(ROOM_ID, USER_ID), typing=True) + self.reconnect() typing._push_update(member=RoomMember(ROOM_ID, USER_ID), typing=True) |