diff --git a/Ccs/pus_datapool.py b/Ccs/pus_datapool.py index 41b81f563011de3cb69e4061f11ca863740ec59e..b2d62f63858e6ade51854e1ba54ae1e973362f52 100644 --- a/Ccs/pus_datapool.py +++ b/Ccs/pus_datapool.py @@ -30,6 +30,7 @@ from typing import NamedTuple from collections import deque from database.tm_db import DbTelemetryPool, DbTelemetry, scoped_session_maker, FEEDataTelemetry, RMapTelemetry import importlib +from sqlalchemy.exc import OperationalError as SQLOperationalError cfg = confignator.get_config(check_interpolation=False) @@ -665,12 +666,13 @@ class DatapoolManager: # start_new = True new_session = self.session_factory_storage + creation_time = round(time.time()) # If no TC Pool has been started start new one if start_new: pool_row = DbTelemetryPool( pool_name=pool_name, - modification_time=time.time(), + modification_time=creation_time, protocol=protocol) new_session.add(pool_row) # new_session.flush() @@ -825,6 +827,11 @@ class DatapoolManager: self.logger.debug('Socket timeout ({}:{})'.format(host, port)) new_session.commit() continue + except SQLOperationalError as e: + self.logger.warning(e) + new_session.close() + pool_row = new_session.query(DbTelemetryPool).filter(DbTelemetryPool.pool_name == pool_name, + DbTelemetryPool.modification_time == creation_time).first() except socket.error as e: self.logger.error('Socket error ({}:{})'.format(host, port)) self.logger.exception(e) @@ -836,6 +843,10 @@ class DatapoolManager: self.logger.exception(e) self.connections[pool_name]['recording'] = False break + except Exception as e: + self.logger.error(e) + self.connections[pool_name]['recording'] = False + break # if self.state[pool_row.pool_name] % 10 != 0: new_session.commit() new_session.close() @@ -968,7 +979,7 @@ class DatapoolManager: with self.lock: self.databuflen += len(buf) except socket.timeout: - self.logger.info('Socket timeout {}:{} [TC RX]'.format(host, port)) + self.logger.debug('Socket timeout {}:{} [TC RX]'.format(host, port)) continue except socket.error: self.logger.error('Socket error')