diff --git a/frappe/__init__.py b/frappe/__init__.py index c512de0de6..b31377a563 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -1115,9 +1115,12 @@ def get_document_cache_key(doctype: str, name: str): return f"document_cache::{doctype}::{name}" -def clear_document_cache(doctype, name): +def clear_document_cache(doctype: str, name: str | None = None) -> None: def clear_in_redis(): - cache().delete_value(get_document_cache_key(doctype, name)) + if name is not None: + cache().delete_value(get_document_cache_key(doctype, name)) + else: + cache().delete_keys(get_document_cache_key(doctype, "")) clear_in_redis() if hasattr(db, "after_commit"): diff --git a/frappe/cache_manager.py b/frappe/cache_manager.py index 12e829ff09..eee703bcf9 100644 --- a/frappe/cache_manager.py +++ b/frappe/cache_manager.py @@ -125,8 +125,9 @@ def clear_doctype_cache(doctype=None): clear_controller_cache(doctype) cache = frappe.cache() - for key in ("is_table", "doctype_modules", "document_cache"): + for key in ("is_table", "doctype_modules"): cache.delete_value(key) + cache.delete_keys("document_cache") def clear_single(dt): for name in doctype_cache_keys: diff --git a/frappe/database/database.py b/frappe/database/database.py index fc4f7b3b1b..2bac5a1ffc 100644 --- a/frappe/database/database.py +++ b/frappe/database/database.py @@ -920,10 +920,8 @@ class Database: if isinstance(dn, str): frappe.clear_document_cache(dt, dn) else: - # TODO: Fix this; doesn't work rn - gavin@frappe.io - # frappe.cache().hdel_keys(dt, "document_cache") - # Workaround: clear all document caches - frappe.cache().delete_value("document_cache") + # No way to guess which documents are modified, clear all of them + frappe.clear_document_cache(dt) for column, value in to_update.items(): query = query.set(column, value)