Add __slots__ to replication commands. (#16429)

To slightly reduce the amount of memory each command takes.
This commit is contained in:
Patrick Cloke 2023-10-05 07:38:55 -04:00 committed by GitHub
parent 009b47badf
commit 4e302b30b6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 1 deletions

1
changelog.d/16429.misc Normal file
View file

@ -0,0 +1 @@
Reduce the size of each replication command instance.

View file

@ -18,7 +18,7 @@ allowed to be sent by which side.
""" """
import abc import abc
import logging import logging
from typing import Optional, Tuple, Type, TypeVar from typing import List, Optional, Tuple, Type, TypeVar
from synapse.replication.tcp.streams._base import StreamRow from synapse.replication.tcp.streams._base import StreamRow
from synapse.util import json_decoder, json_encoder from synapse.util import json_decoder, json_encoder
@ -74,6 +74,8 @@ SC = TypeVar("SC", bound="_SimpleCommand")
class _SimpleCommand(Command): class _SimpleCommand(Command):
"""An implementation of Command whose argument is just a 'data' string.""" """An implementation of Command whose argument is just a 'data' string."""
__slots__ = ["data"]
def __init__(self, data: str): def __init__(self, data: str):
self.data = data self.data = data
@ -122,6 +124,8 @@ class RdataCommand(Command):
RDATA presence master 59 ["@baz:example.com", "online", ...] RDATA presence master 59 ["@baz:example.com", "online", ...]
""" """
__slots__ = ["stream_name", "instance_name", "token", "row"]
NAME = "RDATA" NAME = "RDATA"
def __init__( def __init__(
@ -179,6 +183,8 @@ class PositionCommand(Command):
of the stream. of the stream.
""" """
__slots__ = ["stream_name", "instance_name", "prev_token", "new_token"]
NAME = "POSITION" NAME = "POSITION"
def __init__( def __init__(
@ -235,6 +241,8 @@ class ReplicateCommand(Command):
REPLICATE REPLICATE
""" """
__slots__: List[str] = []
NAME = "REPLICATE" NAME = "REPLICATE"
def __init__(self) -> None: def __init__(self) -> None:
@ -264,6 +272,8 @@ class UserSyncCommand(Command):
Where <state> is either "start" or "end" Where <state> is either "start" or "end"
""" """
__slots__ = ["instance_id", "user_id", "device_id", "is_syncing", "last_sync_ms"]
NAME = "USER_SYNC" NAME = "USER_SYNC"
def __init__( def __init__(
@ -316,6 +326,8 @@ class ClearUserSyncsCommand(Command):
CLEAR_USER_SYNC <instance_id> CLEAR_USER_SYNC <instance_id>
""" """
__slots__ = ["instance_id"]
NAME = "CLEAR_USER_SYNC" NAME = "CLEAR_USER_SYNC"
def __init__(self, instance_id: str): def __init__(self, instance_id: str):
@ -343,6 +355,8 @@ class FederationAckCommand(Command):
FEDERATION_ACK <instance_name> <token> FEDERATION_ACK <instance_name> <token>
""" """
__slots__ = ["instance_name", "token"]
NAME = "FEDERATION_ACK" NAME = "FEDERATION_ACK"
def __init__(self, instance_name: str, token: int): def __init__(self, instance_name: str, token: int):
@ -368,6 +382,15 @@ class UserIpCommand(Command):
USER_IP <user_id>, <access_token>, <ip>, <device_id>, <last_seen>, <user_agent> USER_IP <user_id>, <access_token>, <ip>, <device_id>, <last_seen>, <user_agent>
""" """
__slots__ = [
"user_id",
"access_token",
"ip",
"user_agent",
"device_id",
"last_seen",
]
NAME = "USER_IP" NAME = "USER_IP"
def __init__( def __init__(
@ -441,6 +464,8 @@ class LockReleasedCommand(Command):
LOCK_RELEASED ["<instance_name>", "<lock_name>", "<lock_key>"] LOCK_RELEASED ["<instance_name>", "<lock_name>", "<lock_key>"]
""" """
__slots__ = ["instance_name", "lock_name", "lock_key"]
NAME = "LOCK_RELEASED" NAME = "LOCK_RELEASED"
def __init__( def __init__(