1
0
mirror of https://github.com/django/django.git synced 2025-10-26 07:06:08 +00:00

[3.1.x] Fixed #31728 -- Fixed cache culling when no key is found for deletion.

DatabaseCache._cull implementation could fail if no key was found to
perform a deletion in the table. This prevented the new cache key/value
from being correctly added.

Backport of f386454d13 from master
This commit is contained in:
Guillermo Bonvehí
2020-06-20 04:33:24 -03:00
committed by Mariusz Felisiak
parent ac7f7eab0f
commit b2e2489d80
2 changed files with 20 additions and 3 deletions

14
tests/cache/tests.py vendored
View File

@@ -621,6 +621,20 @@ class BaseCacheTests:
def test_zero_cull(self):
self._perform_cull_test('zero_cull', 50, 19)
def test_cull_delete_when_store_empty(self):
try:
cull_cache = caches['cull']
except InvalidCacheBackendError:
self.skipTest("Culling isn't implemented.")
old_max_entries = cull_cache._max_entries
# Force _cull to delete on first cached record.
cull_cache._max_entries = -1
try:
cull_cache.set('force_cull_delete', 'value', 1000)
self.assertIs(cull_cache.has_key('force_cull_delete'), True)
finally:
cull_cache._max_entries = old_max_entries
def _perform_invalid_key_test(self, key, expected_warning):
"""
All the builtin backends should warn (except memcached that should