mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-23 20:12:42 -06:00
fix(misc): Handle cache unpickling failure in release check
Guard `cache.get('latest_release')` during release checks to prevent a
500 when stale cached data can't be unpickled after dependency upgrades.
On failure, log at debug level and delete the affected cache key.
Fixes #21254
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import re
|
||||
from collections import namedtuple
|
||||
import logging
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib import messages
|
||||
@@ -28,6 +29,8 @@ __all__ = (
|
||||
'SearchView',
|
||||
)
|
||||
|
||||
logger = logging.getLogger(f'netbox.{__name__}')
|
||||
|
||||
Link = namedtuple('Link', ('label', 'viewname', 'permission', 'count'))
|
||||
|
||||
|
||||
@@ -50,7 +53,14 @@ class HomeView(ConditionalLoginRequiredMixin, View):
|
||||
# Check whether a new release is available. (Only for superusers.)
|
||||
new_release = None
|
||||
if request.user.is_superuser:
|
||||
latest_release = cache.get('latest_release')
|
||||
# cache.get() can raise if the cached value can't be unpickled after dependency upgrades
|
||||
try:
|
||||
latest_release = cache.get('latest_release')
|
||||
except Exception:
|
||||
logger.debug("Failed to read 'latest_release' from cache; deleting key", exc_info=True)
|
||||
cache.delete('latest_release')
|
||||
latest_release = None
|
||||
|
||||
if latest_release:
|
||||
release_version, release_url = latest_release
|
||||
if release_version > version.parse(settings.RELEASE.version):
|
||||
|
||||
Reference in New Issue
Block a user