summary refs log tree commit diff
path: root/synapse/replication/tcp/__init__.py
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2017-03-31 10:21:40 +0100
committerErik Johnston <erik@matrix.org>2017-03-31 10:21:40 +0100
commitfb5daca9946f54953179ba86d877bb5f70f3c30f (patch)
treeb40bfe275ab9fc7a4021a3475b9ec19ba275e3c5 /synapse/replication/tcp/__init__.py
parentMerge branch 'develop' of github.com:matrix-org/synapse into matrix-org-hotfixes (diff)
parentRemove user from process_presence when stops syncing (diff)
downloadsynapse-fb5daca9946f54953179ba86d877bb5f70f3c30f.tar.xz
Merge branch 'erikj/repl_tcp_server' of github.com:matrix-org/synapse into matrix-org-hotfixes-tcp-repl github/matrix-org-hotfixes-tcp-repl matrix-org-hotfixes-tcp-repl
Diffstat (limited to 'synapse/replication/tcp/__init__.py')
-rw-r--r--synapse/replication/tcp/__init__.py46
1 files changed, 46 insertions, 0 deletions
diff --git a/synapse/replication/tcp/__init__.py b/synapse/replication/tcp/__init__.py
new file mode 100644

index 0000000000..8b4e886d4e --- /dev/null +++ b/synapse/replication/tcp/__init__.py
@@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 Vector Creations Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""This module implements the TCP replication protocol used by synapse to +communicate between the master process and its workers (when they're enabled). + +The protocol is based on fire and forget, line based commands. An example flow +would be (where '>' indicates master->worker and '<' worker->master flows):: + + > SERVER example.com + < REPLICATE events 53 + > RDATA events 54 ["$foo1:bar.com", ...] + > RDATA events 55 ["$foo4:bar.com", ...] + +The example shows the server accepting a new connection and sending its identity +with the `SERVER` command, followed by the client asking to subscribe to the +`events` stream from the token `53`. The server then periodically sends `RDATA` +commands which have the format `RDATA <stream_name> <token> <row>`, where the +format of `<row>` is defined by the individual streams. + +Error reporting happens by either the client or server sending an `ERROR` +command, and usually the connection will be closed. + + +Structure of the module: + * client.py - the client classes used for workers to connect to master + * command.py - the definitions of all the valid commands + * protocol.py - contains bot the client and server protocol implementations, + these should not be used directly + * resource.py - the server classes that accepts and handle client connections + * streams.py - the definitons of all the valid streams + +Further details can be found in docs/tcp_replication.rst +"""