diff options
author | Kristján Valur Jónsson <sweskman@gmail.com> | 2023-05-10 10:25:41 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-10 13:25:41 +0300 |
commit | 35b7e09a57a1b7e2931d90e4b13858b68cee97cf (patch) | |
tree | 3f96c1a979d5b26f0813cabbed37eacdcd9b47bc | |
parent | f056118224e851915922de02ec40f2d16c9e4dd7 (diff) | |
download | redis-py-35b7e09a57a1b7e2931d90e4b13858b68cee97cf.tar.gz |
Kristjan/issue #2754: Add missing argument to SentinelManagedConnection.read_response() (#2756)
* Increase timeout for a test which would hang completely if failing.
Timeouts in virtualized CI backends can occasionally fail if too short.
* add "disconnect_on_error" argument to SentinelManagedConnection
* update Changes
* lint
-rw-r--r-- | CHANGES | 1 | ||||
-rw-r--r-- | redis/asyncio/sentinel.py | 3 | ||||
-rw-r--r-- | redis/sentinel.py | 10 | ||||
-rw-r--r-- | tests/test_asyncio/test_commands.py | 2 |
4 files changed, 13 insertions, 3 deletions
@@ -1,3 +1,4 @@ + * Fix #2754, adding a missing argument to SentinelManagedConnection * Fix `xadd` command to accept non-negative `maxlen` including 0 * Revert #2104, #2673, add `disconnect_on_error` option to `read_response()` (issues #2506, #2624) * Add `address_remap` parameter to `RedisCluster` diff --git a/redis/asyncio/sentinel.py b/redis/asyncio/sentinel.py index 9147ed8..501e234 100644 --- a/redis/asyncio/sentinel.py +++ b/redis/asyncio/sentinel.py @@ -67,11 +67,14 @@ class SentinelManagedConnection(Connection): self, disable_decoding: bool = False, timeout: Optional[float] = None, + *, + disconnect_on_error: Optional[float] = True, ): try: return await super().read_response( disable_decoding=disable_decoding, timeout=timeout, + disconnect_on_error=disconnect_on_error, ) except ReadOnlyError: if self.connection_pool.is_master: diff --git a/redis/sentinel.py b/redis/sentinel.py index ac6921a..f9f8f1c 100644 --- a/redis/sentinel.py +++ b/redis/sentinel.py @@ -1,5 +1,6 @@ import random import weakref +from typing import Optional from redis.client import Redis from redis.commands import SentinelCommands @@ -53,9 +54,14 @@ class SentinelManagedConnection(Connection): def connect(self): return self.retry.call_with_retry(self._connect_retry, lambda error: None) - def read_response(self, disable_decoding=False): + def read_response( + self, disable_decoding=False, *, disconnect_on_error: Optional[bool] = False + ): try: - return super().read_response(disable_decoding=disable_decoding) + return super().read_response( + disable_decoding=disable_decoding, + disconnect_on_error=disconnect_on_error, + ) except ReadOnlyError: if self.connection_pool.is_master: # When talking to a master, a ReadOnlyError when likely diff --git a/tests/test_asyncio/test_commands.py b/tests/test_asyncio/test_commands.py index 955b9d4..5cde286 100644 --- a/tests/test_asyncio/test_commands.py +++ b/tests/test_asyncio/test_commands.py @@ -3051,7 +3051,7 @@ class TestRedisCommands: # the task is now sleeping, lets send it an exception task.cancel() # If all is well, the task should finish right away, otherwise fail with Timeout - async with async_timeout(0.1): + async with async_timeout(1.0): await task |