RAPTOR v18.4: Исправлена отчетность, активированы выходные
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
import asyncio
|
||||
import logging
|
||||
from typing import Any
|
||||
|
||||
from grpc.aio import AioRpcError
|
||||
|
||||
from t_tech.invest.logging import get_metadata_from_aio_error
|
||||
from t_tech.invest.retrying.base_retry_manager import BaseRetryManager
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class AsyncRetryManager(BaseRetryManager):
|
||||
async def call_with_retries(self, call: Any):
|
||||
retries_left = self.get_initial_retries()
|
||||
while retries_left > 0:
|
||||
logger.debug("Trying to call")
|
||||
response = await call()
|
||||
try:
|
||||
await response
|
||||
logger.debug("Call succeeded")
|
||||
return response
|
||||
except AioRpcError as exception:
|
||||
retries_left -= 1
|
||||
logger.debug("Retries left = %s", retries_left)
|
||||
|
||||
metadata = get_metadata_from_aio_error(exception)
|
||||
seconds_to_sleep = self.extract_seconds_to_sleep(metadata)
|
||||
await self._sleep(seconds_to_sleep)
|
||||
|
||||
logger.debug("RetryManager exhausted, no retries left")
|
||||
return response
|
||||
|
||||
async def _sleep(self, seconds_to_sleep):
|
||||
await asyncio.sleep(seconds_to_sleep)
|
||||
Reference in New Issue
Block a user