mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2024-11-22 17:36:34 +03:00
Consider all reconnect attempts as retrying (#1557)
This means that a value of 0 retries will no longer try to reconnect.
This commit is contained in:
parent
2a114917f1
commit
1d6fd7898a
|
@ -51,6 +51,7 @@ class UserMethods:
|
|||
|
||||
request_index = 0
|
||||
self._last_request = time.time()
|
||||
|
||||
for attempt in retry_range(self._request_retries):
|
||||
try:
|
||||
future = sender.send(request, ordered=ordered)
|
||||
|
|
|
@ -95,17 +95,23 @@ def strip_text(text, entities):
|
|||
return text
|
||||
|
||||
|
||||
def retry_range(retries):
|
||||
def retry_range(retries, force_retry=True):
|
||||
"""
|
||||
Generates an integer sequence starting from 1. If `retries` is
|
||||
not a zero or a positive integer value, the sequence will be
|
||||
infinite, otherwise it will end at `retries + 1`.
|
||||
"""
|
||||
yield 1
|
||||
|
||||
# We need at least one iteration even if the retries are 0
|
||||
# when force_retry is True.
|
||||
if force_retry and not (retries is None or retries < 0):
|
||||
retries += 1
|
||||
|
||||
attempt = 0
|
||||
while attempt != retries:
|
||||
attempt += 1
|
||||
yield 1 + attempt
|
||||
yield attempt
|
||||
|
||||
|
||||
|
||||
async def _maybe_await(value):
|
||||
|
|
|
@ -217,6 +217,7 @@ class MTProtoSender:
|
|||
self._log.info('Connecting to %s...', self._connection)
|
||||
|
||||
connected = False
|
||||
|
||||
for attempt in retry_range(self._retries):
|
||||
if not connected:
|
||||
connected = await self._try_connect(attempt)
|
||||
|
@ -357,14 +358,16 @@ class MTProtoSender:
|
|||
self._state.reset()
|
||||
|
||||
retries = self._retries if self._auto_reconnect else 0
|
||||
for attempt in retry_range(retries):
|
||||
|
||||
attempt = 0
|
||||
# We're already "retrying" to connect, so we don't want to force retries
|
||||
for attempt in retry_range(retries, force_retry=False):
|
||||
try:
|
||||
await self._connect()
|
||||
except (IOError, asyncio.TimeoutError) as e:
|
||||
last_error = e
|
||||
self._log.info('Failed reconnection attempt %d with %s',
|
||||
attempt, e.__class__.__name__)
|
||||
|
||||
await asyncio.sleep(self._delay)
|
||||
except Exception as e:
|
||||
last_error = e
|
||||
|
|
Loading…
Reference in New Issue
Block a user