|
|
@ -18,11 +18,15 @@ from synapse.util.caches import cache_counter, caches_by_name |
|
|
|
|
|
|
|
|
|
|
|
from blist import sorteddict |
|
|
|
from blist import sorteddict |
|
|
|
import logging |
|
|
|
import logging |
|
|
|
|
|
|
|
import os |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
logger = logging.getLogger(__name__) |
|
|
|
logger = logging.getLogger(__name__) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CACHE_SIZE_FACTOR = float(os.environ.get("SYNAPSE_CACHE_FACTOR", 0.1)) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class StreamChangeCache(object): |
|
|
|
class StreamChangeCache(object): |
|
|
|
"""Keeps track of the stream positions of the latest change in a set of entities. |
|
|
|
"""Keeps track of the stream positions of the latest change in a set of entities. |
|
|
|
|
|
|
|
|
|
|
@ -33,7 +37,7 @@ class StreamChangeCache(object): |
|
|
|
old then the cache will simply return all given entities. |
|
|
|
old then the cache will simply return all given entities. |
|
|
|
""" |
|
|
|
""" |
|
|
|
def __init__(self, name, current_stream_pos, max_size=10000, prefilled_cache={}): |
|
|
|
def __init__(self, name, current_stream_pos, max_size=10000, prefilled_cache={}): |
|
|
|
self._max_size = max_size |
|
|
|
self._max_size = int(max_size * CACHE_SIZE_FACTOR) |
|
|
|
self._entity_to_key = {} |
|
|
|
self._entity_to_key = {} |
|
|
|
self._cache = sorteddict() |
|
|
|
self._cache = sorteddict() |
|
|
|
self._earliest_known_stream_pos = current_stream_pos |
|
|
|
self._earliest_known_stream_pos = current_stream_pos |
|
|
|