From: Jc2k Date: Thu, 4 Jul 2024 11:14:28 +0000 (+0100) Subject: Automatically repair configs broken by the last_error retry glitch (#1443) X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=293ae65ec7c97781bb36fc27d7f6eaddd1f8e601;p=music-assistant-server.git Automatically repair configs broken by the last_error retry glitch (#1443) --- diff --git a/music_assistant/server/controllers/config.py b/music_assistant/server/controllers/config.py index 99a59999..e2d1e86f 100644 --- a/music_assistant/server/controllers/config.py +++ b/music_assistant/server/controllers/config.py @@ -694,6 +694,7 @@ class ConfigController: async with aiofiles.open(filename, "r", encoding="utf-8") as _file: self._data = json_loads(await _file.read()) LOGGER.debug("Loaded persistent settings from %s", filename) + await self._migrate() return except FileNotFoundError: pass @@ -701,6 +702,20 @@ class ConfigController: LOGGER.exception("Error while reading persistent storage file %s", filename) LOGGER.debug("Started with empty storage: No persistent storage file found.") + async def _migrate(self) -> None: + changed = False + + # Older versions of MA can create corrupt entries with no domain if retrying + # logic runs after a provider has been removed. Remove those corrupt entries. + for instance_id, provider_config in list(self._data.get(CONF_PROVIDERS, {}).items()): + if "domain" not in provider_config: + self._data[CONF_PROVIDERS].pop(instance_id, None) + LOGGER.warning("Removed corrupt provider configuration: %s", instance_id) + changed = True + + if changed: + await self._async_save() + async def _async_save(self) -> None: """Save persistent data to disk.""" filename_backup = f"{self.filename}.backup"