diff options
| author | LV-426 <lv-426@taproot.org.il> | 2015-05-05 01:33:35 +0300 |
|---|---|---|
| committer | LV-426 <lv-426@taproot.org.il> | 2015-05-05 19:28:09 +0300 |
| commit | 0e1d15d0d464b6b6dbaeb2744bfa2008f83d91a8 (patch) | |
| tree | aa188dba82b9e989ff640205e129bb61ffd1486a /src | |
| parent | 17290bc6d011ec3bd3dfb4cdbefa3bb7843ee660 (diff) | |
init_DB(): more refactoring, assist kernel via op_factory__DBO_rzdb__init_DB
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/rz_kernel.py | 55 | ||||
| -rw-r--r-- | src/server/rz_server.py | 8 |
2 files changed, 32 insertions, 31 deletions
diff --git a/src/server/rz_kernel.py b/src/server/rz_kernel.py index 0b0581ca..e2a2043b 100644 --- a/src/server/rz_kernel.py +++ b/src/server/rz_kernel.py @@ -89,36 +89,18 @@ class RZ_Kernel(object): - all public methods decorated with deco__exception_log """ - def __init__(self, cfg): - self.cfg = cfg + def __init__(self): self.cache__rzdoc_name_to_rzdoc = {} self.heartbeat_period_sec = 0.5 - self.db_ctl = DB_Controller(cfg.db_base_url) 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.rzdoc__mainpage_name) - self.db_ctl.exec_op(op_init) - op_probe = DBO_rzdb__fetch_DB_metablock() # 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 + self.db_ctl = None # set by caller + self.op_factory__DBO_rzdb__init_DB = None # required for DB initialization, set by caller - return self.db_ctl + self.should_stop = False + self.db_conn_avail = False + self.db_metablock_obtained = False def start(self): @@ -137,15 +119,30 @@ class RZ_Kernel(object): try: op = DBO_nop() self.db_ctl.exec_op(op) - - if not self.db_initialized: - self._init_DB() - - except Exception: + self.db_conn_avail = True + except Exception as e: log.info('rz_kernel: unable to establish DB connection') + self.db_conn_avail = False finally: t__last_db_conn_check = t_0 + if self.db_conn_avail and not self.db_metablock_obtained: + try: + op_probe = DBO_rzdb__fetch_DB_metablock() + db_mb = self.db_ctl.exec_op(op_probe) + if db_mb is None: + log.warning('uninitialized DB detected, attempting initialization') + op_init = self.op_factory__DBO_rzdb__init_DB.gen_op__rzdb__init_DB() + self.db_ctl.exec_op(op_init) + op_probe = DBO_rzdb__fetch_DB_metablock() # reattempt mb fetch + db_mb = self.db_ctl.exec_op(op_probe) + log.info('DB initialized, schema-version: %s' % (db_mb['schema_version'])) + else: + log.info('DB metablock read, schema-version: %s' % (db_mb['schema_version'])) + self.db_metablock_obtained = True + except Exception as e: + log.info('rz_kernel: failed DB metablock fetch / DB init') + for rzdoc, r_assoc_set in self.rzdoc_reader_assoc_map.items(): for r_assoc in r_assoc_set: diff --git a/src/server/rz_server.py b/src/server/rz_server.py index 7442a16b..21f29160 100644 --- a/src/server/rz_server.py +++ b/src/server/rz_server.py @@ -261,6 +261,9 @@ class FlaskExt(Flask): request.peer_sock_addr = self.req_probe__sock_addr.probe_client_socket_addr__http_req(request) request.host_sock_addr = self.req_probe__sock_addr.probe_requested_host__http_req(request) + def gen_op__rzdb__init_DB(self): # provided to assist kernel with DB initialization + return DBO_rzdb__init_DB(self.rz_config.rzdoc__mainpage_name) + def make_default_options_response(self): ret = Flask.make_default_options_response(self) @@ -508,14 +511,15 @@ if __name__ == "__main__": # init kernel # kernel = RZ_Kernel() + kernel.db_ctl = DB_Controller(cfg.db_base_url) # # init webapp # webapp = init_webapp(cfg, kernel) - ws_srv = init_ws_interface(cfg, kernel, webapp) - webapp.user_db = user_db + kernel.op_factory__DBO_rzdb__init_DB = webapp # assist kernel with DB initialization + ws_srv = init_ws_interface(cfg, kernel, webapp) try: kernel.start() |
