mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-02 14:56:42 -04:00
Split presence out of master (#9820)
This commit is contained in:
parent
d924827da1
commit
9d25a0ae65
17 changed files with 245 additions and 245 deletions
|
@ -55,6 +55,8 @@ from synapse.replication.tcp.streams import (
|
|||
CachesStream,
|
||||
EventsStream,
|
||||
FederationStream,
|
||||
PresenceFederationStream,
|
||||
PresenceStream,
|
||||
ReceiptsStream,
|
||||
Stream,
|
||||
TagAccountDataStream,
|
||||
|
@ -99,6 +101,10 @@ class ReplicationCommandHandler:
|
|||
self._instance_id = hs.get_instance_id()
|
||||
self._instance_name = hs.get_instance_name()
|
||||
|
||||
self._is_presence_writer = (
|
||||
hs.get_instance_name() in hs.config.worker.writers.presence
|
||||
)
|
||||
|
||||
self._streams = {
|
||||
stream.NAME: stream(hs) for stream in STREAMS_MAP.values()
|
||||
} # type: Dict[str, Stream]
|
||||
|
@ -153,6 +159,14 @@ class ReplicationCommandHandler:
|
|||
|
||||
continue
|
||||
|
||||
if isinstance(stream, (PresenceStream, PresenceFederationStream)):
|
||||
# Only add PresenceStream as a source on the instance in charge
|
||||
# of presence.
|
||||
if self._is_presence_writer:
|
||||
self._streams_to_replicate.append(stream)
|
||||
|
||||
continue
|
||||
|
||||
# Only add any other streams if we're on master.
|
||||
if hs.config.worker_app is not None:
|
||||
continue
|
||||
|
@ -350,7 +364,7 @@ class ReplicationCommandHandler:
|
|||
) -> Optional[Awaitable[None]]:
|
||||
user_sync_counter.inc()
|
||||
|
||||
if self._is_master:
|
||||
if self._is_presence_writer:
|
||||
return self._presence_handler.update_external_syncs_row(
|
||||
cmd.instance_id, cmd.user_id, cmd.is_syncing, cmd.last_sync_ms
|
||||
)
|
||||
|
@ -360,7 +374,7 @@ class ReplicationCommandHandler:
|
|||
def on_CLEAR_USER_SYNC(
|
||||
self, conn: IReplicationConnection, cmd: ClearUserSyncsCommand
|
||||
) -> Optional[Awaitable[None]]:
|
||||
if self._is_master:
|
||||
if self._is_presence_writer:
|
||||
return self._presence_handler.update_external_syncs_clear(cmd.instance_id)
|
||||
else:
|
||||
return None
|
||||
|
|
|
@ -272,15 +272,22 @@ class PresenceStream(Stream):
|
|||
NAME = "presence"
|
||||
ROW_TYPE = PresenceStreamRow
|
||||
|
||||
def __init__(self, hs):
|
||||
def __init__(self, hs: "HomeServer"):
|
||||
store = hs.get_datastore()
|
||||
|
||||
if hs.config.worker_app is None:
|
||||
# on the master, query the presence handler
|
||||
if hs.get_instance_name() in hs.config.worker.writers.presence:
|
||||
# on the presence writer, query the presence handler
|
||||
presence_handler = hs.get_presence_handler()
|
||||
update_function = presence_handler.get_all_presence_updates
|
||||
|
||||
from synapse.handlers.presence import PresenceHandler
|
||||
|
||||
assert isinstance(presence_handler, PresenceHandler)
|
||||
|
||||
update_function = (
|
||||
presence_handler.get_all_presence_updates
|
||||
) # type: UpdateFunction
|
||||
else:
|
||||
# Query master process
|
||||
# Query presence writer process
|
||||
update_function = make_http_update_function(hs, self.NAME)
|
||||
|
||||
super().__init__(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue