Merge pull request #2315 from rmehta/cache-full-fix
[hot] fix bug that caused session crashing when cache was full
This commit is contained in:
commit
b26ebbc60e
3 changed files with 18 additions and 15 deletions
|
|
@ -135,6 +135,8 @@ def init(site, sites_path=None, new_site=False):
|
|||
local.jenv = None
|
||||
local.jloader =None
|
||||
local.cache = {}
|
||||
local.form_dict = _dict()
|
||||
local.session = _dict()
|
||||
|
||||
setup_module_map()
|
||||
|
||||
|
|
@ -149,8 +151,6 @@ def connect(site=None, db_name=None):
|
|||
if site:
|
||||
init(site)
|
||||
local.db = Database(user=db_name or local.conf.db_name)
|
||||
local.form_dict = _dict()
|
||||
local.session = _dict()
|
||||
set_user("Administrator")
|
||||
|
||||
def get_site_config(sites_path=None, site_path=None):
|
||||
|
|
|
|||
|
|
@ -94,7 +94,7 @@ def get_dict(fortype, name=None):
|
|||
fortype = fortype.lower()
|
||||
cache = frappe.cache()
|
||||
asset_key = fortype + ":" + (name or "-")
|
||||
translation_assets = cache.hget("translation_assets", frappe.local.lang) or {}
|
||||
translation_assets = cache.hget("translation_assets", frappe.local.lang, shared=True) or {}
|
||||
|
||||
if not asset_key in translation_assets:
|
||||
if fortype=="doctype":
|
||||
|
|
@ -123,7 +123,7 @@ def get_dict(fortype, name=None):
|
|||
|
||||
translation_assets[asset_key] = message_dict
|
||||
|
||||
cache.hset("translation_assets", frappe.local.lang, translation_assets)
|
||||
cache.hset("translation_assets", frappe.local.lang, translation_assets, shared=True)
|
||||
|
||||
return translation_assets[asset_key]
|
||||
|
||||
|
|
@ -203,7 +203,7 @@ def load_lang(lang, apps=None):
|
|||
if lang=='en':
|
||||
return {}
|
||||
|
||||
out = frappe.cache().hget("lang_full_dict", lang)
|
||||
out = frappe.cache().hget("lang_full_dict", lang, shared=True)
|
||||
if not out:
|
||||
out = {}
|
||||
for app in (apps or frappe.get_all_apps(True)):
|
||||
|
|
@ -216,7 +216,7 @@ def load_lang(lang, apps=None):
|
|||
parent_out.update(out)
|
||||
out = parent_out
|
||||
|
||||
frappe.cache().hset("lang_full_dict", lang, out)
|
||||
frappe.cache().hset("lang_full_dict", lang, out, shared=True)
|
||||
|
||||
return out or {}
|
||||
|
||||
|
|
@ -260,8 +260,8 @@ def clear_cache():
|
|||
|
||||
# clear translations saved in boot cache
|
||||
cache.delete_key("bootinfo")
|
||||
cache.delete_key("lang_full_dict")
|
||||
cache.delete_key("translation_assets")
|
||||
cache.delete_key("lang_full_dict", shared=True)
|
||||
cache.delete_key("translation_assets", shared=True)
|
||||
cache.delete_key("lang_user_translations")
|
||||
|
||||
def get_messages_for_app(app):
|
||||
|
|
|
|||
|
|
@ -8,7 +8,9 @@ from frappe.utils import cstr
|
|||
|
||||
class RedisWrapper(redis.Redis):
|
||||
"""Redis client that will automatically prefix conf.db_name"""
|
||||
def make_key(self, key, user=None):
|
||||
def make_key(self, key, user=None, shared=False):
|
||||
if shared:
|
||||
return key
|
||||
if user:
|
||||
if user == True:
|
||||
user = frappe.session.user
|
||||
|
|
@ -129,12 +131,13 @@ class RedisWrapper(redis.Redis):
|
|||
def llen(self, key):
|
||||
return super(redis.Redis, self).llen(self.make_key(key))
|
||||
|
||||
def hset(self, name, key, value):
|
||||
def hset(self, name, key, value, shared=False):
|
||||
if not name in frappe.local.cache:
|
||||
frappe.local.cache[name] = {}
|
||||
frappe.local.cache[name][key] = value
|
||||
try:
|
||||
super(redis.Redis, self).hset(self.make_key(name), key, pickle.dumps(value))
|
||||
super(redis.Redis, self).hset(self.make_key(name, shared=shared),
|
||||
key, pickle.dumps(value))
|
||||
except redis.exceptions.ConnectionError:
|
||||
pass
|
||||
|
||||
|
|
@ -142,7 +145,7 @@ class RedisWrapper(redis.Redis):
|
|||
return {key: pickle.loads(value) for key, value in
|
||||
super(redis.Redis, self).hgetall(self.make_key(name)).iteritems()}
|
||||
|
||||
def hget(self, name, key, generator=None):
|
||||
def hget(self, name, key, generator=None, shared=False):
|
||||
if not name in frappe.local.cache:
|
||||
frappe.local.cache[name] = {}
|
||||
if key in frappe.local.cache[name]:
|
||||
|
|
@ -150,7 +153,7 @@ class RedisWrapper(redis.Redis):
|
|||
|
||||
value = None
|
||||
try:
|
||||
value = super(redis.Redis, self).hget(self.make_key(name), key)
|
||||
value = super(redis.Redis, self).hget(self.make_key(name, shared=shared), key)
|
||||
except redis.exceptions.ConnectionError:
|
||||
pass
|
||||
|
||||
|
|
@ -165,12 +168,12 @@ class RedisWrapper(redis.Redis):
|
|||
pass
|
||||
return value
|
||||
|
||||
def hdel(self, name, key):
|
||||
def hdel(self, name, key, shared=False):
|
||||
if name in frappe.local.cache:
|
||||
if key in frappe.local.cache[name]:
|
||||
del frappe.local.cache[name][key]
|
||||
try:
|
||||
super(redis.Redis, self).hdel(self.make_key(name), key)
|
||||
super(redis.Redis, self).hdel(self.make_key(name, shared=shared), key)
|
||||
except redis.exceptions.ConnectionError:
|
||||
pass
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue