Work on retry logic, more logging

This commit is contained in:
Gregor Kleen 2023-05-29 15:14:52 +02:00
parent ace6dbd49f
commit bab70ee743

View File

@ -18,6 +18,7 @@ from base64 import b64decode
from minio import Minio from minio import Minio
from http.client import IncompleteRead from http.client import IncompleteRead
from time import sleep from time import sleep
from random import uniform
from datetime import datetime, timezone, timedelta from datetime import datetime, timezone, timedelta
from dateutil.tz import gettz, UTC from dateutil.tz import gettz, UTC
@ -408,25 +409,36 @@ def main():
offset = 0 offset = 0
retries = 10 retries = 10
while True: while True:
logger.info(
"Downloading %s (%s, %s)...",
backup.filename,
backup.creation,
backup.version_id,
)
download = minio.get_object( download = minio.get_object(
bucket_name="gitlab-backups", bucket_name="gitlab-backups",
object_name=backup.filename, object_name=backup.filename,
version_id=backup.version_id, version_id=backup.version_id,
offset=offset, offset=offset,
) )
download_stream = download.stream(decode_content=True) download_stream = download.stream(amt=1024 * 1024)
try: try:
while chunk := next(download_stream, b""): while chunk := next(download_stream, b""):
logger.debug("Read chunk of %d bytes", len(chunk))
offset += len(chunk) offset += len(chunk)
retries = 10 retries = 10
yield chunk yield chunk
else: else:
break break
except IncompleteRead as e: except IncompleteRead as e:
logger.warn(
"IncompleteRead, retries=%d", retries, exc_info=True
)
if retries <= 0: if retries <= 0:
logger.error("Max retries exceeded")
raise e raise e
retries -= 1 retries -= 1
sleep(10) sleep(uniform(0, 10))
download_stream = download_iter() download_stream = download_iter()