mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-12-16 03:13:53 -05:00
Reduce federation presence replication traffic
This is mainly done by moving the calculation of where to send presence updates from the presence handler to the transaction queue, so we only need to send the presence event (and not the destinations) across the replication connection. Before we were duplicating by sending the full state across once per destination.
This commit is contained in:
parent
2e6f5a4910
commit
29574fd5b3
6 changed files with 139 additions and 80 deletions
|
|
@ -32,6 +32,7 @@ from synapse.replication.slave.storage.transactions import TransactionStore
|
|||
from synapse.replication.slave.storage.devices import SlavedDeviceStore
|
||||
from synapse.replication.tcp.client import ReplicationClientHandler
|
||||
from synapse.storage.engines import create_engine
|
||||
from synapse.storage.presence import PresenceStore
|
||||
from synapse.util.async import Linearizer
|
||||
from synapse.util.httpresourcetree import create_resource_tree
|
||||
from synapse.util.logcontext import LoggingContext, PreserveLoggingContext, preserve_fn
|
||||
|
|
@ -80,6 +81,17 @@ class FederationSenderSlaveStore(
|
|||
|
||||
return rows[0][0] if rows else -1
|
||||
|
||||
# XXX: This is a bit broken because we don't persist the accepted list in a
|
||||
# way that can be replicated. This means that we don't have a way to
|
||||
# invalidate the cache correctly.
|
||||
# This is fine since in practice nobody uses the presence list stuff...
|
||||
get_presence_list_accepted = PresenceStore.__dict__[
|
||||
"get_presence_list_accepted"
|
||||
]
|
||||
get_presence_list_observers_accepted = PresenceStore.__dict__[
|
||||
"get_presence_list_observers_accepted"
|
||||
]
|
||||
|
||||
|
||||
class FederationSenderServer(HomeServer):
|
||||
def get_db_conn(self, run_new_connection=True):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue