retry download if minio closes connection
This commit is contained in:
parent
ae53231065
commit
ace6dbd49f
@ -16,6 +16,8 @@ import logging
|
||||
from base64 import b64decode
|
||||
|
||||
from minio import Minio
|
||||
from http.client import IncompleteRead
|
||||
from time import sleep
|
||||
|
||||
from datetime import datetime, timezone, timedelta
|
||||
from dateutil.tz import gettz, UTC
|
||||
@ -401,12 +403,32 @@ def main():
|
||||
logger.debug("%s", {"import_args": import_args, "env": env})
|
||||
|
||||
try:
|
||||
download = minio.get_object(
|
||||
bucket_name="gitlab-backups",
|
||||
object_name=backup.filename,
|
||||
version_id=backup.version_id,
|
||||
)
|
||||
download_stream = download.stream(decode_content=True)
|
||||
|
||||
def download_iter():
|
||||
offset = 0
|
||||
retries = 10
|
||||
while True:
|
||||
download = minio.get_object(
|
||||
bucket_name="gitlab-backups",
|
||||
object_name=backup.filename,
|
||||
version_id=backup.version_id,
|
||||
offset=offset,
|
||||
)
|
||||
download_stream = download.stream(decode_content=True)
|
||||
try:
|
||||
while chunk := next(download_stream, b""):
|
||||
offset += len(chunk)
|
||||
retries = 10
|
||||
yield chunk
|
||||
else:
|
||||
break
|
||||
except IncompleteRead as e:
|
||||
if retries <= 0:
|
||||
raise e
|
||||
retries -= 1
|
||||
sleep(10)
|
||||
|
||||
download_stream = download_iter()
|
||||
|
||||
with subprocess.Popen(
|
||||
import_args,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user