mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 13:17:32 +00:00
Fix some I/O in the event loop during backup (#89894)
This commit is contained in:
parent
b1f64de6ce
commit
e87359761b
@ -187,13 +187,8 @@ class BackupManager:
|
|||||||
"compressed": True,
|
"compressed": True,
|
||||||
}
|
}
|
||||||
tar_file_path = Path(self.backup_dir, f"{backup_data['slug']}.tar")
|
tar_file_path = Path(self.backup_dir, f"{backup_data['slug']}.tar")
|
||||||
|
size_in_bytes = await self.hass.async_add_executor_job(
|
||||||
if not self.backup_dir.exists():
|
self._mkdir_and_generate_backup_contents,
|
||||||
LOGGER.debug("Creating backup directory")
|
|
||||||
self.hass.async_add_executor_job(self.backup_dir.mkdir)
|
|
||||||
|
|
||||||
await self.hass.async_add_executor_job(
|
|
||||||
self._generate_backup_contents,
|
|
||||||
tar_file_path,
|
tar_file_path,
|
||||||
backup_data,
|
backup_data,
|
||||||
)
|
)
|
||||||
@ -202,7 +197,7 @@ class BackupManager:
|
|||||||
name=backup_name,
|
name=backup_name,
|
||||||
date=date_str,
|
date=date_str,
|
||||||
path=tar_file_path,
|
path=tar_file_path,
|
||||||
size=round(tar_file_path.stat().st_size / 1_048_576, 2),
|
size=round(size_in_bytes / 1_048_576, 2),
|
||||||
)
|
)
|
||||||
if self.loaded_backups:
|
if self.loaded_backups:
|
||||||
self.backups[slug] = backup
|
self.backups[slug] = backup
|
||||||
@ -221,12 +216,16 @@ class BackupManager:
|
|||||||
if isinstance(result, Exception):
|
if isinstance(result, Exception):
|
||||||
raise result
|
raise result
|
||||||
|
|
||||||
def _generate_backup_contents(
|
def _mkdir_and_generate_backup_contents(
|
||||||
self,
|
self,
|
||||||
tar_file_path: Path,
|
tar_file_path: Path,
|
||||||
backup_data: dict[str, Any],
|
backup_data: dict[str, Any],
|
||||||
) -> None:
|
) -> int:
|
||||||
"""Generate backup contents."""
|
"""Generate backup contents and return the size."""
|
||||||
|
if not self.backup_dir.exists():
|
||||||
|
LOGGER.debug("Creating backup directory")
|
||||||
|
self.backup_dir.mkdir()
|
||||||
|
|
||||||
with TemporaryDirectory() as tmp_dir, SecureTarFile(
|
with TemporaryDirectory() as tmp_dir, SecureTarFile(
|
||||||
tar_file_path, "w", gzip=False
|
tar_file_path, "w", gzip=False
|
||||||
) as tar_file:
|
) as tar_file:
|
||||||
@ -246,6 +245,7 @@ class BackupManager:
|
|||||||
arcname="data",
|
arcname="data",
|
||||||
)
|
)
|
||||||
tar_file.add(tmp_dir_path, arcname=".")
|
tar_file.add(tmp_dir_path, arcname=".")
|
||||||
|
return tar_file_path.stat().st_size
|
||||||
|
|
||||||
|
|
||||||
def _generate_slug(date: str, name: str) -> str:
|
def _generate_slug(date: str, name: str) -> str:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user