summaryrefslogtreecommitdiff
path: root/src/server/rz_kernel.py
diff options
context:
space:
mode:
authorLV-426 <lv-426@taproot.org.il>2015-04-09 01:23:34 +0300
committerLV-426 <lv-426@taproot.org.il>2015-04-09 02:03:45 +0300
commit5a686ee16a539bf8a8f72751f18a604477d5da5e (patch)
tree2858660637a9851b30b50794932960484cff6ec8 /src/server/rz_kernel.py
parentb69ac308a56dc1b38820db8c89865a41b05f75b5 (diff)
rz_kernel: host rzdoc lookup cache
Diffstat (limited to 'src/server/rz_kernel.py')
-rw-r--r--src/server/rz_kernel.py42
1 files changed, 32 insertions, 10 deletions
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):