-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Closed
Description
Version: redis-py: 4.3.1
Description: Missing call_with_retry
mechanism in async version of Connection (and SentinelManagedConnection). This behavior differs from the sync version of those classes.
test to reproduce the issue:
import socket
import pytest
from redis.asyncio.retry import Retry
from redis.asyncio.sentinel import SentinelManagedConnection
from redis.backoff import NoBackoff
from .compat import mock
pytestmark = pytest.mark.asyncio
async def test_connect_retry_on_timeout_error():
"""Test that the _connect function is retried in case of a timeout"""
connection_pool = mock.AsyncMock()
connection_pool.get_master_address = mock.AsyncMock(return_value=("localhost", 6379))
conn = SentinelManagedConnection(retry_on_timeout=True, retry=Retry(NoBackoff(), 3), connection_pool=connection_pool)
origin_connect = conn._connect
conn._connect = mock.AsyncMock()
async def mock_connect():
# connect only on the last retry
if conn._connect.call_count <= 2:
raise socket.timeout
else:
return await origin_connect()
conn._connect.side_effect = mock_connect
await conn.connect()
assert conn._connect.call_count == 3
nirvana-msu
Metadata
Metadata
Assignees
Labels
No labels