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 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.util import json_decoder, json_encoder
@ -74,6 +74,8 @@ SC = TypeVar("SC", bound="_SimpleCommand")
class _SimpleCommand(Command):
"""An implementation of Command whose argument is just a 'data' string."""
__slots__ = ["data"]
def __init__(self, data: str):
self.data = data
@ -122,6 +124,8 @@ class RdataCommand(Command):
RDATA presence master 59 ["@baz:example.com", "online", ...]
"""
__slots__ = ["stream_name", "instance_name", "token", "row"]
NAME = "RDATA"
def __init__(
@ -179,6 +183,8 @@ class PositionCommand(Command):
of the stream.
"""
__slots__ = ["stream_name", "instance_name", "prev_token", "new_token"]
NAME = "POSITION"
def __init__(
@ -235,6 +241,8 @@ class ReplicateCommand(Command):
REPLICATE
"""
__slots__: List[str] = []
NAME = "REPLICATE"
def __init__(self) -> None:
@ -264,6 +272,8 @@ class UserSyncCommand(Command):
Where <state> is either "start" or "end"
"""
__slots__ = ["instance_id", "user_id", "device_id", "is_syncing", "last_sync_ms"]
NAME = "USER_SYNC"
def __init__(
@ -316,6 +326,8 @@ class ClearUserSyncsCommand(Command):
CLEAR_USER_SYNC <instance_id>
"""
__slots__ = ["instance_id"]
NAME = "CLEAR_USER_SYNC"
def __init__(self, instance_id: str):
@ -343,6 +355,8 @@ class FederationAckCommand(Command):
FEDERATION_ACK <instance_name> <token>
"""
__slots__ = ["instance_name", "token"]
NAME = "FEDERATION_ACK"
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>
"""
__slots__ = [
"user_id",
"access_token",
"ip",
"user_agent",
"device_id",
"last_seen",
]
NAME = "USER_IP"
def __init__(
@ -441,6 +464,8 @@ class LockReleasedCommand(Command):
LOCK_RELEASED ["<instance_name>", "<lock_name>", "<lock_key>"]
"""
__slots__ = ["instance_name", "lock_name", "lock_key"]
NAME = "LOCK_RELEASED"
def __init__(