feat: add a init timeout of 10 seconds for retry logic
This commit is contained in:
parent
dd1d9df23f
commit
507d5ef631
@ -23,7 +23,7 @@ from typing import Dict, List, Union, Any, Optional
|
|||||||
from PIL import Image
|
from PIL import Image
|
||||||
import copy
|
import copy
|
||||||
import struct
|
import struct
|
||||||
from aiohttp import web, ClientSession, ClientError
|
from aiohttp import web, ClientSession, ClientError, ClientTimeout
|
||||||
import atexit
|
import atexit
|
||||||
|
|
||||||
# Global session
|
# Global session
|
||||||
@ -51,7 +51,7 @@ def exit_handler():
|
|||||||
|
|
||||||
atexit.register(exit_handler)
|
atexit.register(exit_handler)
|
||||||
|
|
||||||
max_retries = int(os.environ.get('MAX_RETRIES', '3'))
|
max_retries = int(os.environ.get('MAX_RETRIES', '5'))
|
||||||
retry_delay_multiplier = float(os.environ.get('RETRY_DELAY_MULTIPLIER', '2'))
|
retry_delay_multiplier = float(os.environ.get('RETRY_DELAY_MULTIPLIER', '2'))
|
||||||
|
|
||||||
print(f"max_retries: {max_retries}, retry_delay_multiplier: {retry_delay_multiplier}")
|
print(f"max_retries: {max_retries}, retry_delay_multiplier: {retry_delay_multiplier}")
|
||||||
@ -60,19 +60,31 @@ async def async_request_with_retry(method, url, **kwargs):
|
|||||||
global client_session
|
global client_session
|
||||||
await ensure_client_session()
|
await ensure_client_session()
|
||||||
retry_delay = 1 # Start with 1 second delay
|
retry_delay = 1 # Start with 1 second delay
|
||||||
|
initial_timeout = 5 # 5 seconds timeout for the initial connection
|
||||||
|
|
||||||
for attempt in range(max_retries):
|
for attempt in range(max_retries):
|
||||||
try:
|
try:
|
||||||
|
# Set a timeout for the initial connection
|
||||||
|
timeout = ClientTimeout(total=None, connect=initial_timeout)
|
||||||
|
kwargs['timeout'] = timeout
|
||||||
|
|
||||||
async with client_session.request(method, url, **kwargs) as response:
|
async with client_session.request(method, url, **kwargs) as response:
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
return response
|
return response
|
||||||
|
except asyncio.TimeoutError:
|
||||||
|
logger.warning(f"Request timed out after {initial_timeout} seconds (attempt {attempt + 1}/{max_retries})")
|
||||||
except ClientError as e:
|
except ClientError as e:
|
||||||
if attempt == max_retries - 1:
|
if attempt == max_retries - 1:
|
||||||
logger.error(f"Request failed after {max_retries} attempts: {e}")
|
logger.error(f"Request failed after {max_retries} attempts: {e}")
|
||||||
# raise
|
# raise
|
||||||
logger.warning(f"Request failed (attempt {attempt + 1}/{max_retries}): {e}")
|
logger.warning(f"Request failed (attempt {attempt + 1}/{max_retries}): {e}")
|
||||||
await asyncio.sleep(retry_delay)
|
|
||||||
retry_delay *= retry_delay_multiplier # Exponential backoff
|
# Wait before retrying
|
||||||
|
await asyncio.sleep(retry_delay)
|
||||||
|
retry_delay *= retry_delay_multiplier # Exponential backoff
|
||||||
|
|
||||||
|
# If all retries fail, raise an exception
|
||||||
|
raise Exception(f"Request failed after {max_retries} attempts")
|
||||||
|
|
||||||
from logging import basicConfig, getLogger
|
from logging import basicConfig, getLogger
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user