perf(cache): fix active SLA doctype caching (#26861)
If no SLA is configured then this query runs on EVERY `validate` call.
Root cause: if not active SLA doctypes exist then `not []` evalutes to
true and causes query to run again.
diff --git a/erpnext/support/doctype/service_level_agreement/service_level_agreement.py b/erpnext/support/doctype/service_level_agreement/service_level_agreement.py
index 8739cb2..cfa264f 100644
--- a/erpnext/support/doctype/service_level_agreement/service_level_agreement.py
+++ b/erpnext/support/doctype/service_level_agreement/service_level_agreement.py
@@ -281,15 +281,18 @@
def get_documents_with_active_service_level_agreement():
- if not frappe.cache().hget("service_level_agreement", "active"):
- set_documents_with_active_service_level_agreement()
+ sla_doctypes = frappe.cache().hget("service_level_agreement", "active")
- return frappe.cache().hget("service_level_agreement", "active")
+ if sla_doctypes is None:
+ return set_documents_with_active_service_level_agreement()
+
+ return sla_doctypes
def set_documents_with_active_service_level_agreement():
active = [sla.document_type for sla in frappe.get_all("Service Level Agreement", fields=["document_type"])]
frappe.cache().hset("service_level_agreement", "active", active)
+ return active
def apply(doc, method=None):