summary refs log tree commit diff
path: root/synapse/replication/tcp/commands.py
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2019-02-26 15:04:34 +0000
committerErik Johnston <erik@matrix.org>2019-02-26 15:05:41 +0000
commit313987187ee04dce5e70db17c1ab9377f283be7e (patch)
treefc529070b91290f9ea6d31afc652454c23243ecc /synapse/replication/tcp/commands.py
parentMerge pull request #4746 from matrix-org/anoa/public_rooms_federate_develop (diff)
downloadsynapse-313987187ee04dce5e70db17c1ab9377f283be7e.tar.xz
Fix tightloop over connecting to replication server
If the client failed to process incoming commands during the initial set
up of the replication connection it would immediately disconnect and
reconnect, resulting in a tightloop.

This can happen, for example, when subscribing to a stream that has a
row that is too long in the backlog.

The fix here is to not consider the connection successfully set up until
the client has succesfully subscribed and caught up with the streams.
This ensures that the retry logic timers aren't reset until then,
meaning that if an error does happen during start up the client will
continue backing off before retrying again.
Diffstat (limited to 'synapse/replication/tcp/commands.py')
-rw-r--r--synapse/replication/tcp/commands.py5
1 files changed, 4 insertions, 1 deletions
diff --git a/synapse/replication/tcp/commands.py b/synapse/replication/tcp/commands.py
index 327556f6a1..2098c32a77 100644
--- a/synapse/replication/tcp/commands.py
+++ b/synapse/replication/tcp/commands.py
@@ -127,8 +127,11 @@ class RdataCommand(Command):
 
 
 class PositionCommand(Command):
-    """Sent by the client to tell the client the stream postition without
+    """Sent by the server to tell the client the stream postition without
     needing to send an RDATA.
+
+    Sent to the client after all missing updates for a stream have been sent
+    to the client and they're now up to date.
     """
     NAME = "POSITION"