Simplify ForwardingCacheBackend to reduce state storage.

Review Request #13449 — Created Dec. 5, 2023 and submitted

Information

Djblets
release-3.x

Reviewers

When ForwardingCacheBackend was 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.cache was 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.

Summary ID
Simplify ForwardingCacheBackend to reduce state storage.
When `ForwardingCacheBackend` was 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.cache` was 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.
bdd536f12f01356f8f5abf2f0b9a590277e8df4d
david
  1. Ship It!
  2. 
      
maubin
  1. Ship It!
  2. 
      
chipx86
Review request changed
Status:
Completed
Change Summary:
Pushed to release-3.x (bfd5811)