mirror of
https://github.com/home-assistant/core.git
synced 2025-07-09 22:37:11 +00:00
Fix recorder hanging at start (#75627)
This commit is contained in:
parent
c05905ebda
commit
20b6c4c48e
@ -436,7 +436,7 @@ class Recorder(threading.Thread):
|
|||||||
self.async_db_connected.set_result(True)
|
self.async_db_connected.set_result(True)
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_set_recorder_ready(self) -> None:
|
def async_set_db_ready(self) -> None:
|
||||||
"""Database live and ready for use.
|
"""Database live and ready for use.
|
||||||
|
|
||||||
Called after non-live migration steps are finished.
|
Called after non-live migration steps are finished.
|
||||||
@ -577,14 +577,19 @@ class Recorder(threading.Thread):
|
|||||||
|
|
||||||
self.hass.add_job(self.async_connection_success)
|
self.hass.add_job(self.async_connection_success)
|
||||||
|
|
||||||
# If shutdown happened before Home Assistant finished starting
|
if self.migration_is_live or schema_is_current:
|
||||||
if self._wait_startup_or_shutdown() is SHUTDOWN_TASK:
|
# If the migrate is live or the schema is current, we need to
|
||||||
self.migration_in_progress = False
|
# wait for startup to complete. If its not live, we need to continue
|
||||||
# Make sure we cleanly close the run if
|
# on.
|
||||||
# we restart before startup finishes
|
self.hass.add_job(self.async_set_db_ready)
|
||||||
self._shutdown()
|
# If shutdown happened before Home Assistant finished starting
|
||||||
self.hass.add_job(self.async_set_recorder_ready)
|
if self._wait_startup_or_shutdown() is SHUTDOWN_TASK:
|
||||||
return
|
self.migration_in_progress = False
|
||||||
|
# Make sure we cleanly close the run if
|
||||||
|
# we restart before startup finishes
|
||||||
|
self._shutdown()
|
||||||
|
self.hass.add_job(self.async_set_db_ready)
|
||||||
|
return
|
||||||
|
|
||||||
# We wait to start the migration until startup has finished
|
# We wait to start the migration until startup has finished
|
||||||
# since it can be cpu intensive and we do not want it to compete
|
# since it can be cpu intensive and we do not want it to compete
|
||||||
@ -604,11 +609,11 @@ class Recorder(threading.Thread):
|
|||||||
"Database Migration Failed",
|
"Database Migration Failed",
|
||||||
"recorder_database_migration",
|
"recorder_database_migration",
|
||||||
)
|
)
|
||||||
self.hass.add_job(self.async_set_recorder_ready)
|
self.hass.add_job(self.async_set_db_ready)
|
||||||
self._shutdown()
|
self._shutdown()
|
||||||
return
|
return
|
||||||
|
|
||||||
self.hass.add_job(self.async_set_recorder_ready)
|
self.hass.add_job(self.async_set_db_ready)
|
||||||
|
|
||||||
_LOGGER.debug("Recorder processing the queue")
|
_LOGGER.debug("Recorder processing the queue")
|
||||||
self.hass.add_job(self._async_set_recorder_ready_migration_done)
|
self.hass.add_job(self._async_set_recorder_ready_migration_done)
|
||||||
|
@ -99,7 +99,7 @@ def migrate_schema(
|
|||||||
if live_migration(version) and not db_ready:
|
if live_migration(version) and not db_ready:
|
||||||
db_ready = True
|
db_ready = True
|
||||||
instance.migration_is_live = True
|
instance.migration_is_live = True
|
||||||
hass.add_job(instance.async_set_recorder_ready)
|
hass.add_job(instance.async_set_db_ready)
|
||||||
new_version = version + 1
|
new_version = version + 1
|
||||||
_LOGGER.info("Upgrading recorder db schema to version %s", new_version)
|
_LOGGER.info("Upgrading recorder db schema to version %s", new_version)
|
||||||
_apply_update(hass, engine, session_maker, new_version, current_version)
|
_apply_update(hass, engine, session_maker, new_version, current_version)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user