* 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"
20 lines
687 B
Python
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
|