Simplify ForwardingCacheBackend to reduce state storage.
Review Request #13449 — Created Dec. 5, 2023 and submitted
ForwardingCacheBackendwas first created, it had to work around
some assumptions in Django where a cache backend could be created but
then never replaced.
Modern Django manages cache backends through a mutable registry,
removing much of the need for
ForwardingCacheBackend. However, it's
still a useful API.
In an effort to keep the logic simple, and to remove any
threading-related requirements in the implementation, this change
updates the backend to just look up the named backend on demand, rather
than storing an instance of it. This should avoid any issues where a
stale backend could ever be in use, and allows Django's connection
management to handle any threading responsibility.
There's also a fix in the code for applying siteconfig settings. The old
code assumed that
django.core.cache.cachewas an instance of the
backend, but it's not anymore. So instead, we now optimistically call
the function we need on it, ignoring any attribute errors if not found.
All Djblets and Review Board unit tests pass.
Tested this with a local server. Verified that when I changed settings,
the cache updated.