From 330f2cdecfd6310adf0966de68b0dbc9f4ac21fd Mon Sep 17 00:00:00 2001 From: milanvo Date: Mon, 6 Nov 2017 13:56:27 +0100 Subject: [PATCH 1/2] Fix recorder stop on SQLite vacuuming error --- homeassistant/components/recorder/purge.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/recorder/purge.py b/homeassistant/components/recorder/purge.py index 90a69f8f2a1e..8835a9e5eeae 100644 --- a/homeassistant/components/recorder/purge.py +++ b/homeassistant/components/recorder/purge.py @@ -2,6 +2,8 @@ from datetime import timedelta import logging +from sqlalchemy import exc + import homeassistant.util.dt as dt_util from .util import session_scope @@ -29,4 +31,7 @@ def purge_old_data(instance, purge_days): _LOGGER.debug("DB engine driver: %s", instance.engine.driver) if instance.engine.driver == 'pysqlite': _LOGGER.info("Vacuuming SQLite to free space") - instance.engine.execute("VACUUM") + try: + instance.engine.execute("VACUUM") + except exc.OperationalError as err: + _LOGGER.error("Error vacuuming SQLite: %s.", err) From 86189701b62faa93ceaad184bdba6110c80c13fc Mon Sep 17 00:00:00 2001 From: milanvo Date: Mon, 6 Nov 2017 14:42:09 +0100 Subject: [PATCH 2/2] Move import to function --- homeassistant/components/recorder/purge.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/recorder/purge.py b/homeassistant/components/recorder/purge.py index 8835a9e5eeae..719f65abb475 100644 --- a/homeassistant/components/recorder/purge.py +++ b/homeassistant/components/recorder/purge.py @@ -2,8 +2,6 @@ from datetime import timedelta import logging -from sqlalchemy import exc - import homeassistant.util.dt as dt_util from .util import session_scope @@ -30,6 +28,8 @@ def purge_old_data(instance, purge_days): # Execute sqlite vacuum command to free up space on disk _LOGGER.debug("DB engine driver: %s", instance.engine.driver) if instance.engine.driver == 'pysqlite': + from sqlalchemy import exc + _LOGGER.info("Vacuuming SQLite to free space") try: instance.engine.execute("VACUUM")