Simplify error handling when creating backup (#134528)

This commit is contained in:
Erik Montnemery 2025-01-03 14:16:05 +01:00 committed by GitHub
parent fb474827b5
commit dc048bfcf5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -800,12 +800,10 @@ class BackupManager:
"""Finish a backup.""" """Finish a backup."""
if TYPE_CHECKING: if TYPE_CHECKING:
assert self._backup_task is not None assert self._backup_task is not None
backup_success = False
try: try:
written_backup = await self._backup_task written_backup = await self._backup_task
except Exception as err: except Exception as err:
self.async_on_backup_event(
CreateBackupEvent(stage=None, state=CreateBackupState.FAILED)
)
if with_automatic_settings: if with_automatic_settings:
self._update_issue_backup_failed() self._update_issue_backup_failed()
@ -831,33 +829,15 @@ class BackupManager:
agent_ids=agent_ids, agent_ids=agent_ids,
open_stream=written_backup.open_stream, open_stream=written_backup.open_stream,
) )
except BaseException:
self.async_on_backup_event(
CreateBackupEvent(stage=None, state=CreateBackupState.FAILED)
)
raise # manager or unexpected error
finally: finally:
try: await written_backup.release_stream()
await written_backup.release_stream()
except Exception:
self.async_on_backup_event(
CreateBackupEvent(stage=None, state=CreateBackupState.FAILED)
)
raise
self.known_backups.add(written_backup.backup, agent_errors) self.known_backups.add(written_backup.backup, agent_errors)
if agent_errors: if not agent_errors:
self.async_on_backup_event(
CreateBackupEvent(stage=None, state=CreateBackupState.FAILED)
)
else:
if with_automatic_settings: if with_automatic_settings:
# create backup was successful, update last_completed_automatic_backup # create backup was successful, update last_completed_automatic_backup
self.config.data.last_completed_automatic_backup = dt_util.now() self.config.data.last_completed_automatic_backup = dt_util.now()
self.store.save() self.store.save()
backup_success = True
self.async_on_backup_event(
CreateBackupEvent(stage=None, state=CreateBackupState.COMPLETED)
)
if with_automatic_settings: if with_automatic_settings:
self._update_issue_after_agent_upload(agent_errors) self._update_issue_after_agent_upload(agent_errors)
@ -868,6 +848,14 @@ class BackupManager:
finally: finally:
self._backup_task = None self._backup_task = None
self._backup_finish_task = None self._backup_finish_task = None
self.async_on_backup_event(
CreateBackupEvent(
stage=None,
state=CreateBackupState.COMPLETED
if backup_success
else CreateBackupState.FAILED,
)
)
self.async_on_backup_event(IdleEvent()) self.async_on_backup_event(IdleEvent())
async def async_restore_backup( async def async_restore_backup(