feat: Keep certain keys persistent in cache

This commit is contained in:
Ankush Menat 2024-05-04 12:26:02 +05:30
parent 45026aed37
commit 8ab308838b
3 changed files with 18 additions and 1 deletions

View file

@ -1049,7 +1049,11 @@ def clear_cache(user: str | None = None, doctype: str | None = None):
frappe.cache_manager.clear_user_cache(user)
else: # everything
# Delete ALL keys associated with this site.
frappe.cache.delete_keys("")
keys_to_delete = set(frappe.cache.get_keys(""))
for key in frappe.get_hooks("persistent_cache_keys"):
keys_to_delete.difference_update(frappe.cache.get_keys(key))
frappe.cache.delete_value(list(keys_to_delete), make_keys=False)
reset_metadata_version()
local.cache = {}
local.new_doc_templates = {}

View file

@ -546,3 +546,10 @@ default_log_clearing_doctypes = {
"Activity Log": 90,
"Route History": 90,
}
# These keys will not be erased when doing frappe.clear_cache()
persistent_cache_keys = [
"update-user-set",
"update-info",
"insert_queue_for_*", # Deferred Insert
]

View file

@ -10,3 +10,9 @@ class TestDeferredInsert(FrappeTestCase):
save_to_db()
self.assertTrue(frappe.db.exists("Route History", route_history))
route_history = {"route": frappe.generate_hash(), "user": "Administrator"}
deferred_insert("Route History", [route_history])
frappe.clear_cache() # deferred_insert cache keys are supposed to be persistent
save_to_db()
self.assertTrue(frappe.db.exists("Route History", route_history))