diff options
| author | LV-426 <lv-426@taproot.org.il> | 2015-04-09 01:23:34 +0300 |
|---|---|---|
| committer | LV-426 <lv-426@taproot.org.il> | 2015-04-09 02:03:45 +0300 |
| commit | 5a686ee16a539bf8a8f72751f18a604477d5da5e (patch) | |
| tree | 2858660637a9851b30b50794932960484cff6ec8 /src/server/rz_kernel.py | |
| parent | b69ac308a56dc1b38820db8c89865a41b05f75b5 (diff) | |
rz_kernel: host rzdoc lookup cache
Diffstat (limited to 'src/server/rz_kernel.py')
| -rw-r--r-- | src/server/rz_kernel.py | 42 |
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): |
