Skip to content

Commit 87ea96a

Browse files
authored
Save entity registry store in worker thread (home-assistant#157274)
1 parent e3cf655 commit 87ea96a

File tree

2 files changed

+8
-4
lines changed

2 files changed

+8
-4
lines changed

homeassistant/helpers/entity_registry.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -824,6 +824,7 @@ def __init__(self, hass: HomeAssistant) -> None:
824824
STORAGE_KEY,
825825
atomic_writes=True,
826826
minor_version=STORAGE_VERSION_MINOR,
827+
serialize_in_event_loop=False,
827828
)
828829
self.hass.bus.async_listen(
829830
EVENT_DEVICE_REGISTRY_UPDATED,
@@ -1630,13 +1631,17 @@ def get_optional_enum[_EnumT: StrEnum](
16301631
self.entities = entities
16311632
self._entities_data = entities.data
16321633

1633-
@callback
16341634
def _data_to_save(self) -> dict[str, Any]:
16351635
"""Return data of entity registry to store in a file."""
1636+
# Create intermediate lists to allow this method to be called from a thread
1637+
# other than the event loop.
16361638
return {
1637-
"entities": [entry.as_storage_fragment for entry in self.entities.values()],
1639+
"entities": [
1640+
entry.as_storage_fragment for entry in list(self.entities.values())
1641+
],
16381642
"deleted_entities": [
1639-
entry.as_storage_fragment for entry in self.deleted_entities.values()
1643+
entry.as_storage_fragment
1644+
for entry in list(self.deleted_entities.values())
16401645
],
16411646
}
16421647

homeassistant/helpers/registry.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,6 @@ def async_schedule_save(self) -> None:
7777
delay = SAVE_DELAY if self.hass.state is CoreState.running else SAVE_DELAY_LONG
7878
self._store.async_delay_save(self._data_to_save, delay)
7979

80-
@callback
8180
@abstractmethod
8281
def _data_to_save(self) -> _StoreDataT:
8382
"""Return data of registry to store in a file."""

0 commit comments

Comments
 (0)