summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/db_op.py7
-rw-r--r--src/server/rz_kernel.py18
2 files changed, 23 insertions, 2 deletions
diff --git a/src/server/db_op.py b/src/server/db_op.py
index a472f39a..3f6e5901 100644
--- a/src/server/db_op.py
+++ b/src/server/db_op.py
@@ -585,6 +585,13 @@ class DBO_match_node_set_by_id_attribute(DBO_match_node_id_set):
super(DBO_match_node_set_by_id_attribute, self).__init__(filter_attr_map={'id': id_set})
+class DBO_nop(DB_op):
+
+ def __init__(self):
+ """
+ Do nothing op used to test DB availability
+ """
+ super(DBO_nop, self).__init__()
class DBO_load_link_set(DB_op):
diff --git a/src/server/rz_kernel.py b/src/server/rz_kernel.py
index fefcbad4..1668d959 100644
--- a/src/server/rz_kernel.py
+++ b/src/server/rz_kernel.py
@@ -10,7 +10,7 @@ import traceback
from db_op import (DBO_diff_commit__attr, DBO_block_chain__commit, DBO_rzdoc__create,
DBO_rzdoc__lookup_by_name, DBO_rzdoc__clone, DBO_rzdoc__delete, DBO_rzdoc__list,
- DBO_block_chain__init, DBO_rzdoc__rename)
+ DBO_block_chain__init, DBO_rzdoc__rename, DBO_nop)
from db_op import DBO_diff_commit__topo
from model.graph import Topo_Diff
from model.model import RZDoc
@@ -92,6 +92,7 @@ class RZ_Kernel(object):
self.cache__rzdoc_name_to_rzdoc = {}
self.should_stop = False
self.heartbeat_period_sec = 0.5
+ self.period__db_conn_check = 60
def start(self):
@@ -100,8 +101,20 @@ class RZ_Kernel(object):
Handle periodic server tasks:
- manage rzdoc subscriber lists
"""
+ t__last_db_conn_check = 0
+
while False == self.should_stop:
+ t_0 = time.time()
+ if t_0 - t__last_db_conn_check > self.period__db_conn_check:
+ try:
+ op = DBO_nop()
+ self.db_ctl.exec_op(op)
+ except Exception:
+ log.info('rz_kernel: unable to establish DB connection')
+ finally:
+ t__last_db_conn_check = t_0
+
for rzdoc, r_assoc_set in self.rzdoc_reader_assoc_map.items():
for r_assoc in r_assoc_set:
@@ -119,9 +132,10 @@ class RZ_Kernel(object):
time.sleep(0.5)
self.executor = ThreadPoolExecutor(max_workers=8)
- self.executor.submit(kernel_heartbeat)
log.info('rz_kernel: on-line')
+ self.executor.submit(kernel_heartbeat)
+
def shutdown(self):
self.should_stop = True
self.executor.shutdown()