From 30941c49f52e723acd93d088de022dea47d6d344 Mon Sep 17 00:00:00 2001 From: Sagar Vora Date: Sat, 21 Jan 2023 17:28:42 +0530 Subject: [PATCH 1/3] chore!: remove special local cache for documents --- frappe/__init__.py | 29 +++-------------------------- frappe/cache_manager.py | 2 -- 2 files changed, 3 insertions(+), 28 deletions(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index 52aa734f8a..4c1540e7a5 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -238,7 +238,6 @@ def init(site: str, sites_path: str = ".", new_site: bool = False) -> None: local.jenv = None local.jloader = None local.cache = {} - local.document_cache = {} local.form_dict = _dict() local.preload_assets = {"style": [], "script": []} local.session = _dict() @@ -1075,25 +1074,10 @@ def set_value(doctype, docname, fieldname, value=None): def get_cached_doc(*args, **kwargs) -> "Document": - def _respond(doc, from_redis=False): - if isinstance(doc, dict): - local.document_cache[key] = doc = get_doc(doc) - - elif from_redis: - local.document_cache[key] = doc - + if (key := can_cache_doc(args)) and (doc := cache().hget("document_cache", key)): return doc - if key := can_cache_doc(args): - # local cache - has "ready" `Document` objects - if doc := local.document_cache.get(key): - return _respond(doc) - - # redis cache - if doc := cache().hget("document_cache", key): - return _respond(doc, True) - - # Not found in local/redis, fetch from DB + # Not found in cache, fetch from DB doc = get_doc(*args, **kwargs) # Store in cache @@ -1106,14 +1090,7 @@ def get_cached_doc(*args, **kwargs) -> "Document": def _set_document_in_cache(key: str, doc: "Document") -> None: - local.document_cache[key] = doc - - # Avoid setting in local.cache since we're already using local.document_cache above - # Try pickling the doc object as-is first, else fallback to doc.as_dict() - try: - cache().hset("document_cache", key, doc, cache_locally=False) - except Exception: - cache().hset("document_cache", key, doc.as_dict(), cache_locally=False) + cache().hset("document_cache", key, doc) def can_cache_doc(args) -> str | None: diff --git a/frappe/cache_manager.py b/frappe/cache_manager.py index 9c9f081c60..24a4c6a271 100644 --- a/frappe/cache_manager.py +++ b/frappe/cache_manager.py @@ -127,8 +127,6 @@ def clear_doctype_cache(doctype=None): for key in ("is_table", "doctype_modules", "document_cache"): cache.delete_value(key) - frappe.local.document_cache = {} - def clear_single(dt): for name in doctype_cache_keys: cache.hdel(name, dt) From 05c03a9345598aabfb7832219fe94fd2a02d3105 Mon Sep 17 00:00:00 2001 From: Sagar Vora Date: Sat, 21 Jan 2023 17:32:24 +0530 Subject: [PATCH 2/3] chore!: remove `cache_locally` parameter --- frappe/utils/redis_wrapper.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/frappe/utils/redis_wrapper.py b/frappe/utils/redis_wrapper.py index e470c83d75..ea91299cfc 100644 --- a/frappe/utils/redis_wrapper.py +++ b/frappe/utils/redis_wrapper.py @@ -45,7 +45,7 @@ class RedisWrapper(redis.Redis): return f"{frappe.conf.db_name}|{key}".encode() - def set_value(self, key, val, user=None, expires_in_sec=None, shared=False, cache_locally=True): + def set_value(self, key, val, user=None, expires_in_sec=None, shared=False): """Sets cache value. :param key: Cache key @@ -55,7 +55,7 @@ class RedisWrapper(redis.Redis): """ key = self.make_key(key, user, shared) - if not expires_in_sec and cache_locally: + if not expires_in_sec: frappe.local.cache[key] = val try: @@ -169,7 +169,6 @@ class RedisWrapper(redis.Redis): key: str, value, shared: bool = False, - cache_locally: bool = True, *args, **kwargs, ): @@ -179,8 +178,7 @@ class RedisWrapper(redis.Redis): _name = self.make_key(name, shared=shared) # set in local - if cache_locally: - frappe.local.cache.setdefault(_name, {})[key] = value + frappe.local.cache.setdefault(_name, {})[key] = value # set in redis try: From 23c9d8a42d0d62c779997962d82c36e938d460a7 Mon Sep 17 00:00:00 2001 From: Sagar Vora Date: Sat, 21 Jan 2023 17:46:41 +0530 Subject: [PATCH 3/3] chore: remove old cache reference --- frappe/__init__.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index 4c1540e7a5..d533e65b58 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -1116,12 +1116,11 @@ def get_document_cache_key(doctype: str, name: str): def clear_document_cache(doctype, name): cache().hdel("last_modified", doctype) - key = get_document_cache_key(doctype, name) - if key in local.document_cache: - del local.document_cache[key] - cache().hdel("document_cache", key) + cache().hdel("document_cache", get_document_cache_key(doctype, name)) + if doctype == "System Settings" and hasattr(local, "system_settings"): delattr(local, "system_settings") + if doctype == "Website Settings" and hasattr(local, "website_settings"): delattr(local, "website_settings")