Shorten recorder connection init (#6432)

* Wait up to 9 seconds

* Set number of recorder retries to 8

* Do not sleep when reporting last connection error if no retries left

* Make sure we clean up old engine if connection is retrying

* Update __init__.py
This commit is contained in:
Paulus Schoutsen 2017-03-06 03:20:12 -08:00 committed by Pascal Vizeli
parent 2baa838ba7
commit 90ad54da7d

View File

@ -43,8 +43,7 @@ DEFAULT_DB_FILE = 'home-assistant_v2.db'
CONF_DB_URL = 'db_url' CONF_DB_URL = 'db_url'
CONF_PURGE_DAYS = 'purge_days' CONF_PURGE_DAYS = 'purge_days'
CONNECT_RETRY_WAIT = 10 CONNECT_RETRY_WAIT = 3
ERROR_QUERY = "Error during query: %s"
FILTER_SCHEMA = vol.Schema({ FILTER_SCHEMA = vol.Schema({
vol.Optional(CONF_EXCLUDE, default={}): vol.Schema({ vol.Optional(CONF_EXCLUDE, default={}): vol.Schema({
@ -159,7 +158,9 @@ class Recorder(threading.Thread):
tries = 1 tries = 1
connected = False connected = False
while not connected and tries < 5: while not connected and tries <= 10:
if tries != 1:
time.sleep(CONNECT_RETRY_WAIT)
try: try:
self._setup_connection() self._setup_connection()
migration.migrate_schema(self) migration.migrate_schema(self)
@ -168,7 +169,6 @@ class Recorder(threading.Thread):
except Exception as err: # pylint: disable=broad-except except Exception as err: # pylint: disable=broad-except
_LOGGER.error("Error during connection setup: %s (retrying " _LOGGER.error("Error during connection setup: %s (retrying "
"in %s seconds)", err, CONNECT_RETRY_WAIT) "in %s seconds)", err, CONNECT_RETRY_WAIT)
time.sleep(CONNECT_RETRY_WAIT)
tries += 1 tries += 1
if not connected: if not connected:
@ -303,6 +303,9 @@ class Recorder(threading.Thread):
else: else:
kwargs['echo'] = False kwargs['echo'] = False
if self.engine is not None:
self.engine.dispose()
self.engine = create_engine(self.db_url, **kwargs) self.engine = create_engine(self.db_url, **kwargs)
models.Base.metadata.create_all(self.engine) models.Base.metadata.create_all(self.engine)
self.get_session = scoped_session(sessionmaker(bind=self.engine)) self.get_session = scoped_session(sessionmaker(bind=self.engine))