datatracker/ietf/utils/cache.py
2023-06-12 13:50:14 -05:00

21 lines
758 B
Python

# Copyright The IETF Trust 2023, All Rights Reserved
# -*- coding: utf-8 -*-
from django.core.cache.backends.base import DEFAULT_TIMEOUT
from django.core.cache.backends.memcached import PyMemcacheCache
from pymemcache.exceptions import MemcacheServerError
from .log import log
class LenientMemcacheCache(PyMemcacheCache):
"""PyMemcacheCache backend that tolerates failed inserts due to object size"""
def set(self, key, value, timeout=DEFAULT_TIMEOUT, version=None):
try:
super().set(key, value, timeout, version)
except MemcacheServerError as err:
if "object too large for cache" in str(err):
log(f"Memcache failed to cache large object for {key}")
else:
raise