mirror of
https://github.com/home-assistant/core.git
synced 2025-07-22 04:37:06 +00:00
Fix delayed registry check to only using the short delay at running (#113471)
This commit is contained in:
parent
052d7d1e19
commit
3528cc86d7
@ -11,7 +11,7 @@ if TYPE_CHECKING:
|
|||||||
from .storage import Store
|
from .storage import Store
|
||||||
|
|
||||||
SAVE_DELAY = 10
|
SAVE_DELAY = 10
|
||||||
SAVE_DELAY_STARTING = 300
|
SAVE_DELAY_LONG = 180
|
||||||
|
|
||||||
|
|
||||||
class BaseRegistry(ABC):
|
class BaseRegistry(ABC):
|
||||||
@ -25,9 +25,7 @@ class BaseRegistry(ABC):
|
|||||||
"""Schedule saving the registry."""
|
"""Schedule saving the registry."""
|
||||||
# Schedule the save past startup to avoid writing
|
# Schedule the save past startup to avoid writing
|
||||||
# the file while the system is starting.
|
# the file while the system is starting.
|
||||||
delay = (
|
delay = SAVE_DELAY if self.hass.state is CoreState.running else SAVE_DELAY_LONG
|
||||||
SAVE_DELAY_STARTING if self.hass.state is CoreState.starting else SAVE_DELAY
|
|
||||||
)
|
|
||||||
self._store.async_delay_save(self._data_to_save, delay)
|
self._store.async_delay_save(self._data_to_save, delay)
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
|
@ -3,10 +3,11 @@
|
|||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from freezegun.api import FrozenDateTimeFactory
|
from freezegun.api import FrozenDateTimeFactory
|
||||||
|
import pytest
|
||||||
|
|
||||||
from homeassistant.core import CoreState, HomeAssistant
|
from homeassistant.core import CoreState, HomeAssistant
|
||||||
from homeassistant.helpers import storage
|
from homeassistant.helpers import storage
|
||||||
from homeassistant.helpers.registry import SAVE_DELAY, SAVE_DELAY_STARTING, BaseRegistry
|
from homeassistant.helpers.registry import SAVE_DELAY, SAVE_DELAY_LONG, BaseRegistry
|
||||||
|
|
||||||
from tests.common import async_fire_time_changed
|
from tests.common import async_fire_time_changed
|
||||||
|
|
||||||
@ -26,12 +27,30 @@ class SampleRegistry(BaseRegistry):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"long_delay_state",
|
||||||
|
(
|
||||||
|
CoreState.not_running,
|
||||||
|
CoreState.starting,
|
||||||
|
CoreState.stopped,
|
||||||
|
CoreState.final_write,
|
||||||
|
),
|
||||||
|
)
|
||||||
async def test_async_schedule_save(
|
async def test_async_schedule_save(
|
||||||
hass: HomeAssistant, freezer: FrozenDateTimeFactory, hass_storage: dict[str, Any]
|
hass: HomeAssistant,
|
||||||
|
freezer: FrozenDateTimeFactory,
|
||||||
|
long_delay_state: CoreState,
|
||||||
|
hass_storage: dict[str, Any],
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test saving the registry."""
|
"""Test saving the registry.
|
||||||
|
|
||||||
|
If CoreState is not running, it should save with long delay.
|
||||||
|
|
||||||
|
Storage will always save at final write if there is a
|
||||||
|
write pending so we should not schedule a save in that case.
|
||||||
|
"""
|
||||||
registry = SampleRegistry(hass)
|
registry = SampleRegistry(hass)
|
||||||
hass.set_state(CoreState.starting)
|
hass.set_state(long_delay_state)
|
||||||
|
|
||||||
registry.async_schedule_save()
|
registry.async_schedule_save()
|
||||||
freezer.tick(SAVE_DELAY)
|
freezer.tick(SAVE_DELAY)
|
||||||
@ -39,7 +58,7 @@ async def test_async_schedule_save(
|
|||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert registry.save_calls == 0
|
assert registry.save_calls == 0
|
||||||
|
|
||||||
freezer.tick(SAVE_DELAY_STARTING)
|
freezer.tick(SAVE_DELAY_LONG)
|
||||||
async_fire_time_changed(hass)
|
async_fire_time_changed(hass)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert registry.save_calls == 1
|
assert registry.save_calls == 1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user