diff --git a/jussi/cache/cache_group.py b/jussi/cache/cache_group.py index 83290b47b5a5b807f60912bb30ea28dfefc1870f..f64fcd354870d4d35f11eb2c71652327806f4a71 100644 --- a/jussi/cache/cache_group.py +++ b/jussi/cache/cache_group.py @@ -33,7 +33,7 @@ from .utils import merge_cached_responses logger = structlog.getLogger(__name__) -BATCH_IRREVERSIBLE_TTL_SET = frozenset([TTL.DEFAULT_EXPIRE_IF_IRREVERSIBLE]) +BATCH_IRREVERSIBLE_TTL_SET = frozenset([TTL.EXPIRE_IF_REVERSIBLE]) # types CacheTTLValue = TypeVar('CacheTTL', int, float, type(None)) @@ -188,13 +188,14 @@ class CacheGroup: ) -> None: key = jsonrpc_cache_key(request) ttl = ttl or request.upstream.ttl - if ttl == TTL.DEFAULT_EXPIRE_IF_IRREVERSIBLE: + if ttl == TTL.EXPIRE_IF_REVERSIBLE: last_irreversible_block_num = last_irreversible_block_num or \ self._memory_cache.gets('last_irreversible_block_num') or \ await self.get('last_irreversible_block_num') ttl = irreversible_ttl(jsonrpc_response=response, - last_irreversible_block_num=last_irreversible_block_num) + last_irreversible_block_num=last_irreversible_block_num, + request=request) elif ttl == TTL.NO_CACHE: return value = self.prepare_response_for_cache(request, response) @@ -218,7 +219,7 @@ class CacheGroup: else: new_ttls = [] for i, ttl in enumerate(ttls): - if ttl == TTL.DEFAULT_EXPIRE_IF_IRREVERSIBLE: + if ttl == TTL.EXPIRE_IF_REVERSIBLE: ttl = irreversible_ttl(responses[i], last_irreversible_block_num) new_ttls.append(ttl) triplets = filter(lambda p: p[0] != TTL.NO_CACHE, zip(ttls, requests, responses)) diff --git a/jussi/cache/ttl.py b/jussi/cache/ttl.py index b78a1af34fbd5cfc5e0816a8883b191cc404a479..d0140da8f28d91cf6ca88f4779bf805b48ad0391 100644 --- a/jussi/cache/ttl.py +++ b/jussi/cache/ttl.py @@ -12,7 +12,7 @@ Method Settings - For readabilty/writabilty, there are shorthand variables for these 'special' TTL values: - `NO_EXPIRE` == 0 - `NO_CACHE` == -1 - - `DEFAULT_EXPIRE_IF_IRREVERSIBLE` == -2 + - `EXPIRE_IF_REVERSIBLE` == -2 """ @@ -21,9 +21,10 @@ from enum import Enum class TTL(Enum): DEFAULT_TTL = 3 + EXTENDED_TTL = 9 NO_EXPIRE = None NO_CACHE = -1 - DEFAULT_EXPIRE_IF_IRREVERSIBLE = -2 + EXPIRE_IF_REVERSIBLE = -2 # pylint: disable=no-else-return def __eq__(self, other: int) -> bool: diff --git a/jussi/cache/utils.py b/jussi/cache/utils.py index 6a3bfe2aae356cccaed6947b6f501ed0aaf7c664..de0e7b9e70bf53e08cf2c37cacd97a6fec093cf0 100644 --- a/jussi/cache/utils.py +++ b/jussi/cache/utils.py @@ -21,7 +21,8 @@ def jsonrpc_cache_key(single_jsonrpc_request: SingleJrpcRequest) -> str: def irreversible_ttl(jsonrpc_response: dict=None, - last_irreversible_block_num: int=None) -> TTL: + last_irreversible_block_num: int=None, + request: SingleJrpcRequest=None) -> TTL: if not jsonrpc_response: return TTL.NO_CACHE if not isinstance(last_irreversible_block_num, int): @@ -30,12 +31,21 @@ def irreversible_ttl(jsonrpc_response: dict=None, return TTL.NO_CACHE try: jrpc_block_num = block_num_from_jsonrpc_response(jsonrpc_response) - return TTL.DEFAULT_TTL + if jrpc_block_num > last_irreversible_block_num: + return TTL.EXTENDED_TTL + else: + return TTL.NO_EXPIRE except Exception as e: + if request is not None: + request_string = request.json() + else: + request_string = 'None' logger.warning( 'Unable to cache using last irreversible block', e=e, - lirb=last_irreversible_block_num) + lirb=last_irreversible_block_num, + request_string=request_string, + jsonrpc_response=jsonrpc_response) return TTL.NO_CACHE