datatracker/ietf/utils/cache.py
Jennifer Richards edd72826e6
fix: Prevent errors when memcached object size is exceeded (#5769)
* feat: Subclass PyMemcacheCache to tolerate too-large object errors

* fix: Use LenientMemcacheCache to prevent search errors

* fix: Re-raise errors other than "object too large"
2023-06-06 14:35:41 -05:00

20 lines
687 B
Python

# Copyright The IETF Trust 2023, All Rights Reserved
# -*- coding: utf-8 -*-
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=None, 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