Browse Source

Retry initial Redis connection (Fixes #1534)

pull/1537/head
Miguel Grinberg 6 months ago
parent
commit
5e898a9b93
Failed to extract signature
  1. 7
      src/socketio/async_redis_manager.py
  2. 7
      src/socketio/redis_manager.py

7
src/socketio/async_redis_manager.py

@ -134,11 +134,12 @@ class AsyncRedisManager(AsyncPubSubManager):
break break
async def _redis_listen_with_retries(self): # pragma: no cover async def _redis_listen_with_retries(self): # pragma: no cover
retry_sleep = 1
_, error = self._get_redis_module_and_error() _, error = self._get_redis_module_and_error()
retry_sleep = 1
subscribed = False
while True: while True:
try: try:
if not self.connected: if not subscribed:
self._redis_connect() self._redis_connect()
await self.pubsub.subscribe(self.channel) await self.pubsub.subscribe(self.channel)
retry_sleep = 1 retry_sleep = 1
@ -149,7 +150,7 @@ class AsyncRedisManager(AsyncPubSubManager):
'retrying in ' 'retrying in '
f'{retry_sleep} secs', f'{retry_sleep} secs',
extra={"redis_exception": str(exc)}) extra={"redis_exception": str(exc)})
self.connected = False subscribed = False
await asyncio.sleep(retry_sleep) await asyncio.sleep(retry_sleep)
retry_sleep *= 2 retry_sleep *= 2
if retry_sleep > 60: if retry_sleep > 60:

7
src/socketio/redis_manager.py

@ -169,11 +169,12 @@ class RedisManager(PubSubManager):
break break
def _redis_listen_with_retries(self): # pragma: no cover def _redis_listen_with_retries(self): # pragma: no cover
retry_sleep = 1
_, error = self._get_redis_module_and_error() _, error = self._get_redis_module_and_error()
retry_sleep = 1
subscribed = False
while True: while True:
try: try:
if not self.connected: if not subscribed:
self._redis_connect() self._redis_connect()
self.pubsub.subscribe(self.channel) self.pubsub.subscribe(self.channel)
retry_sleep = 1 retry_sleep = 1
@ -182,7 +183,7 @@ class RedisManager(PubSubManager):
logger.error('Cannot receive from redis... ' logger.error('Cannot receive from redis... '
f'retrying in {retry_sleep} secs', f'retrying in {retry_sleep} secs',
extra={"redis_exception": str(exc)}) extra={"redis_exception": str(exc)})
self.connected = False subscribed = False
time.sleep(retry_sleep) time.sleep(retry_sleep)
retry_sleep *= 2 retry_sleep *= 2
if retry_sleep > 60: if retry_sleep > 60:

Loading…
Cancel
Save