summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDongkeun Lee <3315213+zakaf@users.noreply.github.com>2022-12-25 23:18:24 +0900
committerGitHub <noreply@github.com>2022-12-25 16:18:24 +0200
commitd693221e9ac4bdf09cf3538ea38e7d7d2799059b (patch)
tree2d9f01b24bb54b46486058a932973bbabcfc9005
parent55298e49caa5d76a7371568d2773e8e245b388a1 (diff)
downloadredis-py-d693221e9ac4bdf09cf3538ea38e7d7d2799059b.tar.gz
Allow EVAL_RO and EVALSHA_RO to be routed to read replica (#2494)
* fix typo (Lue -> Lua) * run eval_ro, evalsha_ro test on redis cluster * Add eval_ro, evalsha_ro to read only commands * assert that commands are run in a round robin manner Co-authored-by: zach.lee <zach.lee@sendbird.com> Co-authored-by: dvora-h <67596500+dvora-h@users.noreply.github.com>
-rw-r--r--redis/commands/cluster.py2
-rw-r--r--redis/commands/core.py2
-rw-r--r--tests/test_cluster.py10
-rw-r--r--tests/test_scripting.py2
4 files changed, 12 insertions, 4 deletions
diff --git a/redis/commands/cluster.py b/redis/commands/cluster.py
index f434f36..a23a94a 100644
--- a/redis/commands/cluster.py
+++ b/redis/commands/cluster.py
@@ -52,6 +52,8 @@ READ_COMMANDS = frozenset(
[
"BITCOUNT",
"BITPOS",
+ "EVAL_RO",
+ "EVALSHA_RO",
"EXISTS",
"GEODIST",
"GEOHASH",
diff --git a/redis/commands/core.py b/redis/commands/core.py
index 4cd0a9f..10eb048 100644
--- a/redis/commands/core.py
+++ b/redis/commands/core.py
@@ -5139,7 +5139,7 @@ class ScriptCommands(CommandsProtocol):
"""
The read-only variant of the EVAL command
- Execute the read-only Lue ``script`` specifying the ``numkeys`` the script
+ Execute the read-only Lua ``script`` specifying the ``numkeys`` the script
will touch and the key names and argument values in ``keys_and_args``.
Returns the result of the script.
diff --git a/tests/test_cluster.py b/tests/test_cluster.py
index 9866cfc..27cfee1 100644
--- a/tests/test_cluster.py
+++ b/tests/test_cluster.py
@@ -561,7 +561,15 @@ class TestRedisClusterObj:
read_cluster.get("foo")
read_cluster.get("foo")
read_cluster.get("foo")
- mocks["send_command"].assert_has_calls([call("READONLY")])
+ mocks["send_command"].assert_has_calls(
+ [
+ call("READONLY"),
+ call("GET", "foo"),
+ call("READONLY"),
+ call("GET", "foo"),
+ call("GET", "foo"),
+ ]
+ )
def test_keyslot(self, r):
"""
diff --git a/tests/test_scripting.py b/tests/test_scripting.py
index bbe845c..b6b5f9f 100644
--- a/tests/test_scripting.py
+++ b/tests/test_scripting.py
@@ -67,7 +67,6 @@ class TestScripting:
@skip_if_server_version_lt("7.0.0")
@skip_if_redis_enterprise()
- @pytest.mark.onlynoncluster
def test_eval_ro(self, r):
r.set("a", "b")
assert r.eval_ro("return redis.call('GET', KEYS[1])", 1, "a") == b"b"
@@ -157,7 +156,6 @@ class TestScripting:
@skip_if_server_version_lt("7.0.0")
@skip_if_redis_enterprise()
- @pytest.mark.onlynoncluster
def test_evalsha_ro(self, r):
r.set("a", "b")
get_sha = r.script_load("return redis.call('GET', KEYS[1])")