From fb5279c841a053d28374ab4550e7ec9141f6d4dd Mon Sep 17 00:00:00 2001 From: LV-426 Date: Mon, 4 May 2015 21:39:43 +0300 Subject: rz_kernel: manage DB session, initialization --- src/server/rz_kernel.py | 41 ++++++++++++++++++++++++++++++++++++----- src/server/rz_server.py | 28 ---------------------------- 2 files changed, 36 insertions(+), 33 deletions(-) (limited to 'src/server') diff --git a/src/server/rz_kernel.py b/src/server/rz_kernel.py index 7b99c357..f331ac5c 100644 --- a/src/server/rz_kernel.py +++ b/src/server/rz_kernel.py @@ -8,9 +8,12 @@ import logging import time import traceback +from db_controller import DB_Controller 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_nop) + DBO_block_chain__init, DBO_rzdoc__rename, DBO_nop, + DBO_match_node_set_by_id_attribute, DBO_rzdb__fetch_DB_metablock, + DBO_rzdb__init_DB) from db_op import DBO_diff_commit__topo from model.graph import Topo_Diff from model.model import RZDoc @@ -86,13 +89,36 @@ class RZ_Kernel(object): - all public methods decorated with deco__exception_log """ - def __init__(self): - self.db_ctl = None - self.rzdoc_reader_assoc_map = defaultdict(list) + def __init__(self, cfg): + self.cfg = cfg self.cache__rzdoc_name_to_rzdoc = {} - self.should_stop = False self.heartbeat_period_sec = 0.5 + self.db_ctl = DB_Controller(cfg) self.period__db_conn_check = 60 + self.rzdoc_reader_assoc_map = defaultdict(list) + + self.should_stop = False + self.db_initialized = False + + def _init_DB(self): + op_probe = DBO_rzdb__fetch_DB_metablock() + + try: + dbmb = self.db_ctl.exec_op(op_probe) + if dbmb is None: + log.warning('detected uninitialized DB, initializing') + op_init = DBO_rzdb__init_DB(self.cfg) + self.db_ctl.exec_op(op_init) + op_probe = DBO_rzdb__fetch_DB_metablock(self.cfg) # reprobe for metablock + dbmb = self.db_ctl.exec_op(op_probe) + log.info('DB initialized, schema-version: %s' % (dbmb['schema_version'])) + else: + log.info('DB connection established, schema-version: %s' % (dbmb['schema_version'])) + except Exception as e: + log.exception('failed to init DB') + raise e + + return self.db_ctl def start(self): @@ -106,10 +132,15 @@ class RZ_Kernel(object): 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) + + if not self.db_initialized: + self._init_DB() + except Exception: log.info('rz_kernel: unable to establish DB connection') finally: diff --git a/src/server/rz_server.py b/src/server/rz_server.py index e5958d37..dc7d8f74 100644 --- a/src/server/rz_server.py +++ b/src/server/rz_server.py @@ -13,7 +13,6 @@ import signal import traceback import types -import db_controller as dbc from db_op import DBO_rzdb__fetch_DB_metablock, DBO_rzdb__init_DB import rz_api import rz_api_rest @@ -434,27 +433,6 @@ def init_config(cfg_dir): cfg = Config.init_from_file(cfg_path) return cfg -def init_DB(cfg): - db_ctl = dbc.DB_Controller(cfg) - op_probe = DBO_rzdb__fetch_DB_metablock(cfg) - - try: - dbmb = db_ctl.exec_op(op_probe) - if dbmb is None: - log.warning('detected uninitialized DB, initializing') - op_init = DBO_rzdb__init_DB(cfg) - db_ctl.exec_op(op_init) - op_probe = DBO_rzdb__fetch_DB_metablock(cfg) # reprobe for metablock - dbmb = db_ctl.exec_op(op_probe) - log.info('DB initialized, schema-version: %s' % (dbmb['schema_version'])) - else: - log.info('DB connection established, schema-version: %s' % (dbmb['schema_version'])) - except Exception as e: - log.exception('failed to init DB') - raise e - - return db_ctl - def init_user_db(cfg): global user_db @@ -532,12 +510,6 @@ if __name__ == "__main__": # kernel = RZ_Kernel() - # - # init DB controller - # - - kernel.db_ctl = init_DB(cfg) - # # init webapp # -- cgit v1.3.1