Browse Source

redis manager, verbose error logging

Sometimes it's very useful to see exact error from redis in logs
pull/1479/head
Eugnee 3 weeks ago
parent
commit
004593060d
  1. 20
      src/socketio/async_redis_manager.py
  2. 17
      src/socketio/redis_manager.py

20
src/socketio/async_redis_manager.py

@ -78,14 +78,19 @@ class AsyncRedisManager(AsyncPubSubManager): # pragma: no cover
self._redis_connect() self._redis_connect()
return await self.redis.publish( return await self.redis.publish(
self.channel, pickle.dumps(data)) self.channel, pickle.dumps(data))
except RedisError: except RedisError as exc:
if retry: if retry:
self._get_logger().error('Cannot publish to redis... ' self._get_logger().error(
'retrying') 'Cannot publish to redis... '
'retrying',
extra={"redis_exception": str(exc)})
retry = False retry = False
else: else:
self._get_logger().error('Cannot publish to redis... ' self._get_logger().error(
'giving up') 'Cannot publish to redis... '
'giving up',
extra={"redis_exception": str(exc)})
break break
async def _redis_listen_with_retries(self): async def _redis_listen_with_retries(self):
@ -99,10 +104,11 @@ class AsyncRedisManager(AsyncPubSubManager): # pragma: no cover
retry_sleep = 1 retry_sleep = 1
async for message in self.pubsub.listen(): async for message in self.pubsub.listen():
yield message yield message
except RedisError: except RedisError as exc:
self._get_logger().error('Cannot receive from redis... ' self._get_logger().error('Cannot receive from redis... '
'retrying in ' 'retrying in '
'{} secs'.format(retry_sleep)) '{} secs'.format(retry_sleep),
extra={"redis_exception": str(exc)})
connect = True connect = True
await asyncio.sleep(retry_sleep) await asyncio.sleep(retry_sleep)
retry_sleep *= 2 retry_sleep *= 2

17
src/socketio/redis_manager.py

@ -115,12 +115,18 @@ class RedisManager(PubSubManager): # pragma: no cover
if not retry: if not retry:
self._redis_connect() self._redis_connect()
return self.redis.publish(self.channel, pickle.dumps(data)) return self.redis.publish(self.channel, pickle.dumps(data))
except redis.exceptions.RedisError: except redis.exceptions.RedisError as exc:
if retry: if retry:
logger.error('Cannot publish to redis... retrying') logger.error(
'Cannot publish to redis... retrying',
extra={"redis_exception": str(exc)}
)
retry = False retry = False
else: else:
logger.error('Cannot publish to redis... giving up') logger.error(
'Cannot publish to redis... giving up',
extra={"redis_exception": str(exc)}
)
break break
def _redis_listen_with_retries(self): def _redis_listen_with_retries(self):
@ -133,9 +139,10 @@ class RedisManager(PubSubManager): # pragma: no cover
self.pubsub.subscribe(self.channel) self.pubsub.subscribe(self.channel)
retry_sleep = 1 retry_sleep = 1
yield from self.pubsub.listen() yield from self.pubsub.listen()
except redis.exceptions.RedisError: except redis.exceptions.RedisError as exc:
logger.error('Cannot receive from redis... ' logger.error('Cannot receive from redis... '
'retrying in {} secs'.format(retry_sleep)) 'retrying in {} secs'.format(retry_sleep),
extra={"redis_exception": str(exc)})
connect = True connect = True
time.sleep(retry_sleep) time.sleep(retry_sleep)
retry_sleep *= 2 retry_sleep *= 2

Loading…
Cancel
Save