From 5a686ee16a539bf8a8f72751f18a604477d5da5e Mon Sep 17 00:00:00 2001 From: LV-426 Date: Thu, 9 Apr 2015 01:23:34 +0300 Subject: rz_kernel: host rzdoc lookup cache --- src/server/rz_api_common.py | 23 +---------------------- src/server/rz_api_rest.py | 2 +- src/server/rz_kernel.py | 42 ++++++++++++++++++++++++++++++++---------- src/server/rz_server.py | 3 +-- 4 files changed, 35 insertions(+), 35 deletions(-) (limited to 'src/server') diff --git a/src/server/rz_api_common.py b/src/server/rz_api_common.py index 7261ab2b..83d29b7c 100644 --- a/src/server/rz_api_common.py +++ b/src/server/rz_api_common.py @@ -55,9 +55,9 @@ def sanitize_input__rzdoc_name(rzdoc_name): """ sanitize rzdoc name raw input """ - if None != rzdoc_name and len(rzdoc_name) > current_app.rz_config.rzdoc__name__max_length: raise API_Exception__bad_request('rzdoc: open request: doc name exceeds max doc name limit: %s' % (rzdoc_name)) + return rzdoc_name def validate_obj__attr_diff(attr_diff): @@ -67,24 +67,3 @@ def validate_obj__attr_diff(attr_diff): if 'id' == attr_name: raise Exception('validation error: Attr_Diff: forbidden attribute change: \'id\', n_id: ' + n_id) -def cache_lookup__rzdoc(rzdoc_name): - """ - lookup RZDoc by rzdoc_name, possibly triggering a DB query - - @raise RZDoc_Exception__not_found - """ - # FIXME: impl cache cleansing logic - - cache_doc = current_app.cache__rzdoc_name_to_rzdoc.get(rzdoc_name) - if None != cache_doc: - return cache_doc - - kernel = current_app.kernel - rz_doc = kernel.rzdoc__lookup_by_name(rzdoc_name) - - if None == rz_doc: - raise RZDoc_Exception__not_found(rzdoc_name) - - current_app.cache__rzdoc_name_to_rzdoc[rzdoc_name] = rz_doc - return rz_doc - diff --git a/src/server/rz_api_rest.py b/src/server/rz_api_rest.py index b486d227..f12a6d91 100644 --- a/src/server/rz_api_rest.py +++ b/src/server/rz_api_rest.py @@ -58,7 +58,7 @@ def __context__common(rzdoc_name=None): if None != rzdoc_name: s_rzdoc_name = sanitize_input__rzdoc_name(rzdoc_name) - ret.rzdoc = cache_lookup__rzdoc(s_rzdoc_name) + ret.rzdoc = current_app.kernel.cache_lookup__rzdoc(s_rzdoc_name) return ret def __load_node_set_by_id_attr_common(id_set): diff --git a/src/server/rz_kernel.py b/src/server/rz_kernel.py index 63131f6e..801f82b0 100644 --- a/src/server/rz_kernel.py +++ b/src/server/rz_kernel.py @@ -84,19 +84,28 @@ class RZ_Kernel(object): def __init__(self): self.db_ctl = None + self.rzdoc_reader_assoc_map = defaultdict(list) + self.cache__rzdoc_name_to_rzdoc = {} - def exec_chain_commit_op(self, diff_obj, ctx): + def cache_lookup__rzdoc(self, rzdoc_name): + """ + lookup RZDoc by rzdoc_name, possibly triggering a DB query - # FIXME: clean - if isinstance(diff_obj, Topo_Diff): - commit_obj = diff_obj.to_json_dict() - else: - commit_obj = diff_obj + @raise RZDoc_Exception__not_found + """ + # FIXME: impl cache cleansing logic - rzdoc = ctx.rzdoc - op = DBO_block_chain__commit(commit_obj, ctx) - op = QT_RZDOC_Meta_NS_Filter(rzdoc)(op) - self.db_ctl.exec_op(op) + cache_doc = self.cache__rzdoc_name_to_rzdoc.get(rzdoc_name) + if None != cache_doc: + return cache_doc + + rz_doc = self.rzdoc__lookup_by_name(rzdoc_name) + + if None == rz_doc: + raise RZDoc_Exception__not_found(rzdoc_name) + + self.cache__rzdoc_name_to_rzdoc[rzdoc_name] = rz_doc + return rz_doc def diff_commit__topo(self, topo_diff, ctx=None): """ @@ -132,6 +141,19 @@ class RZ_Kernel(object): self.exec_chain_commit_op(attr_diff, ctx) return attr_diff, op_ret + def exec_chain_commit_op(self, diff_obj, ctx): + + # FIXME: clean + if isinstance(diff_obj, Topo_Diff): + commit_obj = diff_obj.to_json_dict() + else: + commit_obj = diff_obj + + rzdoc = ctx.rzdoc + op = DBO_block_chain__commit(commit_obj, ctx) + op = QT_RZDOC_Meta_NS_Filter(rzdoc)(op) + self.db_ctl.exec_op(op) + def rzdoc__clone(self, rzdoc, ctx=None): diff --git a/src/server/rz_server.py b/src/server/rz_server.py index 23067895..3232b18e 100644 --- a/src/server/rz_server.py +++ b/src/server/rz_server.py @@ -295,8 +295,7 @@ def init_webapp(cfg, kernel, db_ctl=None): webapp.rz_config = cfg webapp.kernel = kernel - webapp.cache__rzdoc_name_to_rzdoc = {} - + init_rest_interface(cfg, webapp) return webapp -- cgit v1.3.1