Use multipart for snapshot uploads (#2076)

* Use multipart for snapshot uploads

* Wrap I/O and run in executor

* revert 7f26b43

* remove cleanup
This commit is contained in:
Joakim Sørensen 2020-09-24 13:09:53 +02:00 committed by GitHub
parent f1121fe66f
commit a9abd933b5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -182,11 +182,15 @@ class APISnapshots(CoreSysAttributes):
"""Upload a snapshot file."""
with TemporaryDirectory(dir=str(self.sys_config.path_tmp)) as temp_dir:
tar_file = Path(temp_dir, "snapshot.tar")
reader = await request.multipart()
contents = await reader.next()
try:
with tar_file.open("wb") as snapshot:
async for data in request.content.iter_any():
snapshot.write(data)
while True:
chunk = await contents.read_chunk()
if not chunk:
break
snapshot.write(chunk)
except OSError as err:
_LOGGER.error("Can't write new snapshot file: %s", err)
@ -199,6 +203,6 @@ class APISnapshots(CoreSysAttributes):
self.sys_snapshots.import_snapshot(tar_file)
)
if snapshot:
return {ATTR_SLUG: snapshot.slug}
return False
if snapshot:
return {ATTR_SLUG: snapshot.slug}
return False