From aca5bdb89fbbc80543f3d11070ca4d7b5765723d Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Mon, 6 Apr 2020 15:19:32 +0530 Subject: [PATCH 1/4] feat: don't rebuild count cache on every insert --- frappe/cache_manager.py | 11 +---------- frappe/hooks.py | 3 +-- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/frappe/cache_manager.py b/frappe/cache_manager.py index 9959ba97bb..50c4c396a2 100644 --- a/frappe/cache_manager.py +++ b/frappe/cache_manager.py @@ -121,7 +121,7 @@ def clear_doctype_map(doctype, name): cache_key = frappe.scrub(doctype) + '_map' frappe.cache().hdel(cache_key, name) -def build_table_count_cache(doc=None, method=None, *args, **kwargs): +def build_table_count_cache(): if (frappe.flags.in_patch or frappe.flags.in_install or frappe.flags.in_migrate @@ -129,15 +129,6 @@ def build_table_count_cache(doc=None, method=None, *args, **kwargs): or frappe.flags.in_setup_wizard): return - if doc and isinstance(doc, Document): - doctype = doc.doctype - - if doc.meta.istable: - return - - if doctype in count_cache_blacklist: - return - _cache = frappe.cache() data = frappe.db.multisql({ "mariadb": """ diff --git a/frappe/hooks.py b/frappe/hooks.py index 1b12b26c3a..03b2a2a62e 100644 --- a/frappe/hooks.py +++ b/frappe/hooks.py @@ -143,8 +143,7 @@ doc_events = { ], "on_change": [ "frappe.social.doctype.energy_point_rule.energy_point_rule.process_energy_points" - ], - "after_insert": "frappe.cache_manager.build_table_count_cache" + ] }, "Event": { "after_insert": "frappe.integrations.doctype.google_calendar.google_calendar.insert_event_in_google_calendar", From 5c83ad9b97a14d53eb81413cf069147487b462c4 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Mon, 6 Apr 2020 15:20:11 +0530 Subject: [PATCH 2/4] feat: delete domain cache on frappe.clear_cache() --- frappe/__init__.py | 1 + frappe/cache_manager.py | 12 +++++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index e19327fcff..b72d24029c 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -587,6 +587,7 @@ def clear_cache(user=None, doctype=None): else: # everything from frappe import translate frappe.cache_manager.clear_user_cache() + frappe.cache_manager.clear_domain_cache() translate.clear_cache() reset_metadata_version() local.cache = {} diff --git a/frappe/cache_manager.py b/frappe/cache_manager.py index 50c4c396a2..0c5b5f94b4 100644 --- a/frappe/cache_manager.py +++ b/frappe/cache_manager.py @@ -14,7 +14,8 @@ common_default_keys = ["__default", "__global"] global_cache_keys = ("app_hooks", "installed_apps", "app_modules", "module_app", "system_settings", 'scheduler_events', 'time_zone', 'webhooks', 'active_domains', - 'active_modules', 'assignment_rule', 'server_script_map', 'wkhtmltopdf_version') + 'active_modules', 'assignment_rule', 'server_script_map', 'wkhtmltopdf_version', + 'domain_restricted_doctypes', 'domain_restricted_pages', 'information_schema:counts') user_cache_keys = ("bootinfo", "user_recent", "roles", "user_doc", "lang", "defaults", "user_permissions", "home_page", "linked_with", @@ -23,10 +24,6 @@ user_cache_keys = ("bootinfo", "user_recent", "roles", "user_doc", "lang", doctype_cache_keys = ("meta", "form_meta", "table_columns", "last_modified", "linked_doctypes", 'notifications', 'workflow' ,'energy_point_rule_map') -count_cache_blacklist = ["Version", "Tag", "ToDo", "List Filter", "Note Seen By", "Notification Log", - "Document Follow", "Communication", "Email Queue", "Deleted Document", "File", "Email Queue Recipient" - "Comment", "Has Role", "Attendance", "Route History"] - def clear_user_cache(user=None): cache = frappe.cache() @@ -46,6 +43,11 @@ def clear_user_cache(user=None): clear_defaults_cache() clear_global_cache() +def clear_domain_cache(user=None): + cache = frappe.cache() + domain_cache_keys = ('domain_restricted_doctypes', 'domain_restricted_pages') + cache.delete_value(domain_cache_keys) + def clear_global_cache(): from frappe.website.render import clear_cache as clear_website_cache From 947dc83ddb3d6dfeeebeac5910e34c75fa489243 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Mon, 6 Apr 2020 15:20:25 +0530 Subject: [PATCH 3/4] feat: use domain restrictions from cache --- frappe/desk/desktop.py | 4 ++-- frappe/hooks.py | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/frappe/desk/desktop.py b/frappe/desk/desktop.py index 1cb03355c6..0688d77cb6 100644 --- a/frappe/desk/desktop.py +++ b/frappe/desk/desktop.py @@ -26,8 +26,8 @@ class Workspace: self.allowed_reports = get_allowed_reports() self.table_counts = get_table_with_counts() - self.restricted_doctypes = build_domain_restriced_doctype_cache() - self.restricted_pages = build_domain_restriced_page_cache() + self.restricted_doctypes = frappe.cache().get_value("domain_restricted_doctypes") or build_domain_restriced_doctype_cache() + self.restricted_pages = frappe.cache().get_value("domain_restricted_pages") or build_domain_restriced_page_cache() def get_pages_to_extend(self): pages = frappe.get_all("Desk Page", filters={ diff --git a/frappe/hooks.py b/frappe/hooks.py index 03b2a2a62e..5997263c32 100644 --- a/frappe/hooks.py +++ b/frappe/hooks.py @@ -155,9 +155,11 @@ doc_events = { "on_update": "frappe.integrations.doctype.google_contacts.google_contacts.update_contacts_to_google_contacts", }, "DocType": { + "after_insert": "frappe.cache_manager.build_domain_restriced_doctype_cache", "after_save": "frappe.cache_manager.build_domain_restriced_doctype_cache", }, "Page": { + "after_insert": "frappe.cache_manager.build_domain_restriced_page_cache", "after_save": "frappe.cache_manager.build_domain_restriced_page_cache", }, "Event Update Log": { From c412fde953446c4f5eb7d11aebe9d4e7534e508c Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Fri, 10 Apr 2020 16:42:03 +0530 Subject: [PATCH 4/4] feat: don't rebuild cache on delete --- frappe/hooks.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/frappe/hooks.py b/frappe/hooks.py index 5997263c32..2561399a78 100644 --- a/frappe/hooks.py +++ b/frappe/hooks.py @@ -138,8 +138,7 @@ doc_events = { ], "on_trash": [ "frappe.desk.notifications.clear_doctype_notifications", - "frappe.workflow.doctype.workflow_action.workflow_action.process_workflow_actions", - "frappe.cache_manager.build_table_count_cache" + "frappe.workflow.doctype.workflow_action.workflow_action.process_workflow_actions" ], "on_change": [ "frappe.social.doctype.energy_point_rule.energy_point_rule.process_energy_points"