From 5903e60057ee26b163326cfb9e5dc5292b30ab83 Mon Sep 17 00:00:00 2001 From: Dominik George <dominik.george@teckids.org> Date: Tue, 8 Feb 2022 21:23:38 +0100 Subject: [PATCH] Invalidate both database backends --- CHANGELOG.rst | 1 + aleksis/core/util/core_helpers.py | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 18bc5e283..2449b5d35 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -15,6 +15,7 @@ Fixed * Inviting newly created persons for registration failed * [Docker] Do not clear cache in migration container die to session invalidation issues * Notification email about user changes was broken +* SQL cache invalidation could fail when hitting OOT database `2.7.3`_ - 2022-02-03 --------------------- diff --git a/aleksis/core/util/core_helpers.py b/aleksis/core/util/core_helpers.py index fc83b6050..6988dd531 100644 --- a/aleksis/core/util/core_helpers.py +++ b/aleksis/core/util/core_helpers.py @@ -17,6 +17,8 @@ from django.utils.crypto import get_random_string from django.utils.functional import lazy from django.utils.module_loading import import_string +from cachalot.api import invalidate +from cachalot.signals import post_invalidation from cache_memoize import cache_memoize @@ -403,6 +405,8 @@ class OOTRouter: default_db = "default" oot_db = "default_oot" + _cachalot_invalidating = [] + @property def oot_labels(self): return settings.DATABASE_OOT_LABELS @@ -441,3 +445,20 @@ class OOTRouter: return False return None + + @classmethod + def _invalidate_cachalot(cls, sender, **kwargs): + if sender in cls._cachalot_invalidating: + return + cls._cachalot_invalidating.append(sender) + + if kwargs["db_alias"] == cls.default_db: + invalidate(sender, db_alias=cls.oot_db) + elif kwargs["db_alias"] == cls.oot_db: + invalidate(sender, db_alias=cls.default_db) + + if sender in cls._cachalot_invalidating: + cls._cachalot_invalidating.remove(sender) + + +post_invalidation.connect(OOTRouter._invalidate_cachalot) -- GitLab