mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-02 19:54:53 -04:00
Intern all the things
This commit is contained in:
parent
f96526ffc2
commit
acdfef7b14
8 changed files with 97 additions and 45 deletions
|
@ -15,6 +15,9 @@
|
|||
|
||||
import synapse.metrics
|
||||
from lrucache import LruCache
|
||||
import os
|
||||
|
||||
CACHE_SIZE_FACTOR = float(os.environ.get("SYNAPSE_CACHE_FACTOR", 0.1))
|
||||
|
||||
DEBUG_CACHES = False
|
||||
|
||||
|
@ -27,9 +30,62 @@ cache_counter = metrics.register_cache(
|
|||
labels=["name"],
|
||||
)
|
||||
|
||||
_string_cache = LruCache(5000)
|
||||
_string_cache = LruCache(int(5000 * CACHE_SIZE_FACTOR))
|
||||
caches_by_name["string_cache"] = _string_cache
|
||||
|
||||
|
||||
KNOWN_KEYS = {
|
||||
key: key for key in
|
||||
(
|
||||
"auth_events",
|
||||
"content",
|
||||
"depth",
|
||||
"event_id",
|
||||
"hashes",
|
||||
"origin",
|
||||
"origin_server_ts",
|
||||
"prev_events",
|
||||
"room_id",
|
||||
"sender",
|
||||
"signatures",
|
||||
"state_key",
|
||||
"type",
|
||||
"unsigned",
|
||||
"user_id",
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
def intern_string(string):
|
||||
"""Takes a (potentially) unicode string and interns using custom cache
|
||||
"""
|
||||
return _string_cache.setdefault(string, string)
|
||||
|
||||
|
||||
def intern_dict(dictionary):
|
||||
"""Takes a dictionary and interns well known keys and their values
|
||||
"""
|
||||
return _intern_known_values({
|
||||
_intern_key(key): value for key, value in dictionary.items()
|
||||
})
|
||||
|
||||
|
||||
def _intern_known_values(dictionary):
|
||||
intern_str_keys = ("event_id", "room_id")
|
||||
intern_unicode_keys = ("sender", "user_id", "type", "state_key")
|
||||
|
||||
for key in intern_str_keys:
|
||||
val = dictionary.get(key, None)
|
||||
if val is not None:
|
||||
dictionary[key] = intern(val.encode('ascii'))
|
||||
|
||||
for key in intern_unicode_keys:
|
||||
val = dictionary.get(key, None)
|
||||
if val is not None:
|
||||
dictionary[key] = intern_string(val)
|
||||
|
||||
return dictionary
|
||||
|
||||
|
||||
def _intern_key(key):
|
||||
return KNOWN_KEYS.get(key, key)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue