perf: Don't update session in cache after every request (#26308)

It's just reading and writing same information except last_update inside
data which is never read back from this.
This commit is contained in:
Ankush Menat 2024-05-04 11:40:38 +05:30 committed by GitHub
parent 8e76a94a62
commit 7fe9cc4f09
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 9 additions and 9 deletions

View file

@ -409,7 +409,6 @@ def sync_database(rollback: bool) -> bool:
# update session
if session := getattr(frappe.local, "session_obj", None):
if session.update():
frappe.db.commit()
rollback = False
return rollback

View file

@ -416,7 +416,7 @@ def get_workspace_sidebar_items():
has_access = "Workspace Manager" in frappe.get_roles()
# don't get domain restricted pages
blocked_modules = frappe.get_doc("User", frappe.session.user).get_blocked_modules()
blocked_modules = frappe.get_cached_doc("User", frappe.session.user).get_blocked_modules()
blocked_modules.append("Dummy Module")
# adding None to allowed_domains to include pages without domain restriction

View file

@ -192,7 +192,7 @@ def generate_csrf_token():
class Session:
__slots__ = ("user", "user_type", "full_name", "data", "time_diff", "sid")
__slots__ = ("user", "user_type", "full_name", "data", "time_diff", "sid", "_update_in_cache")
def __init__(self, user, resume=False, full_name=None, user_type=None):
self.sid = cstr(frappe.form_dict.get("sid") or unquote(frappe.request.cookies.get("sid", "Guest")))
@ -201,6 +201,7 @@ class Session:
self.full_name = full_name
self.data = frappe._dict({"data": frappe._dict({})})
self.time_diff = None
self._update_in_cache = False
# set local session
frappe.local.session = self.data
@ -319,6 +320,7 @@ class Session:
data = self.get_session_data_from_cache()
if not data:
self._update_in_cache = True
data = self.get_session_data_from_db()
return data
@ -369,6 +371,7 @@ class Session:
def update(self, force=False):
"""extend session expiry"""
if frappe.session.user == "Guest":
return
@ -376,9 +379,6 @@ class Session:
Sessions = frappe.qb.DocType("Sessions")
self.data["data"]["last_updated"] = now
self.data["data"]["lang"] = str(frappe.lang)
# update session in db
last_updated = frappe.cache.hget("last_db_session_update", self.sid)
time_diff = frappe.utils.time_diff_in_seconds(now, last_updated) if last_updated else None
@ -386,6 +386,8 @@ class Session:
# database persistence is secondary, don't update it too often
updated_in_db = False
if (force or (time_diff is None) or (time_diff > 600)) and not frappe.flags.read_only:
self.data.data.last_updated = now
self.data.data.lang = str(frappe.lang)
# update sessions table
(
frappe.qb.update(Sessions)
@ -400,11 +402,10 @@ class Session:
frappe.db.set_value("User", frappe.session.user, "last_active", now, update_modified=False)
frappe.db.commit()
frappe.cache.hset("last_db_session_update", self.sid, now)
updated_in_db = True
frappe.cache.hset("session", self.sid, self.data)
frappe.cache.hset("last_db_session_update", self.sid, now)
frappe.cache.hset("session", self.sid, self.data)
return updated_in_db