summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLV-426 <lv-426@taproot.org.il>2015-04-09 01:24:32 +0300
committerLV-426 <lv-426@taproot.org.il>2015-04-09 02:03:45 +0300
commitd32bd9d94d710c708484dc8918070fa906e891cb (patch)
tree21d01f53ee0159912951dc994cebe190e264b2da /src
parent5a686ee16a539bf8a8f72751f18a604477d5da5e (diff)
rz_kernel: rzdoc_reader_assoc_map, reader subscription management
Diffstat (limited to 'src')
-rw-r--r--src/server/rz_kernel.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/server/rz_kernel.py b/src/server/rz_kernel.py
index 801f82b0..53749595 100644
--- a/src/server/rz_kernel.py
+++ b/src/server/rz_kernel.py
@@ -154,7 +154,50 @@ class RZ_Kernel(object):
op = QT_RZDOC_Meta_NS_Filter(rzdoc)(op)
self.db_ctl.exec_op(op)
+ def rzdoc__reader_subscribe(self,
+ remote_socket_addr=None,
+ rzdoc_name=None,
+ socket=None):
+ rzdoc = self.cache_lookup__rzdoc(rzdoc_name)
+
+ r_assoc = RZDoc_Reader_Association()
+ r_assoc.remote_socket_addr = remote_socket_addr
+ r_assoc.rzdoc = rzdoc
+ r_assoc.socket = socket
+
+ self.rzdoc_reader_assoc_map[rzdoc].append(r_assoc)
+ log.debug("rz_kernel: reader subscribed: assoc: %s" % (r_assoc))
+
+ def rzdoc__reader_unsubscribe__r_assoc(self, r_assoc):
+ return self.rzdoc__reader_unsubscribe(r_assoc.remote_socket_addr,
+ r_assoc.rzdoc_name,
+ r_assoc.socket)
+
+ def rzdoc__reader_unsubscribe(self,
+ remote_socket_addr=None,
+ rzdoc_name=None,
+ socket=None):
+
+ rzdoc = self.cache_lookup__rzdoc(rzdoc_name)
+
+ rm_target = None
+ r_assoc_set = self.rzdoc_reader_assoc_map[rzdoc]
+ for r_assoc in r_assoc_set:
+ if r_assoc.socket == socket:
+ rm_target = r_assoc
+
+ if None == rm_target: # target possibly removed after becoming stale
+ log.debug("rz_kernel: rzdoc__reader_unsubscribe: assoc not found: remote-address: " % (remote_socket_addr))
+ return
+
+ r_assoc_set.remove(rm_target) # FIXME: make thread safe
+ log.debug("rz_kernel: reader unsubscribed: %s" % (rm_target))
+
+ def rzdoc__reader_set_from_rzdoc(self, rzdoc):
+ rzdoc_r_set = self.rzdoc_reader_assoc_map[rzdoc]
+ ret_list = list(rzdoc_r_set)
+ return ret_list
def rzdoc__clone(self, rzdoc, ctx=None):
"""