From 8ab387ac393684a1e40ef3383278a93c63d2f775 Mon Sep 17 00:00:00 2001 From: KunoiSayami Date: Tue, 27 Jun 2023 22:48:56 +0800 Subject: feat: Add retry option while upload Signed-off-by: KunoiSayami --- utils/upload.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/utils/upload.py b/utils/upload.py index 303273a..d3605cf 100755 --- a/utils/upload.py +++ b/utils/upload.py @@ -23,6 +23,7 @@ def sizeof_fmt(num: int, suffix: str = "B"): return f"{num:.1f}Yi{suffix}" +# TODO: use upload in chunks to big file async def send_file( session: aiohttp.ClientSession, args: argparse.Namespace, file: str ) -> None: @@ -47,7 +48,7 @@ async def main(args: argparse.Namespace) -> int: return 0 async with aiohttp.ClientSession( - raise_for_status=True, timeout=aiohttp.ClientTimeout(60) + raise_for_status=True, timeout=aiohttp.ClientTimeout(30) ) as session: async with session.post( args.remote_address, data=build_data(args, "REQUIRE_CLEAN") @@ -55,7 +56,13 @@ async def main(args: argparse.Namespace) -> int: pass for file in pending_upload: logger.info("Start upload %s (%s)", file, sizeof_fmt(os.stat(file).st_size)) - await send_file(session, args, file) + for retries in range(3): + try: + await send_file(session, args, file) + break + except asyncio.TimeoutError: + if retries == 2: + raise async with session.post(args.remote_address, data=build_data(args, "UPLOADED")): pass -- cgit v1.3.1