Skip to content

Commit cfdcfd8

Browse files
SoulPancakedvora-h
andauthored
Add support for cluster myshardid (#2704)
* feat: adding support for cluster myshardid * lint fix * fix: comment fix and async test * fix: adding version check * fix lint: * linters --------- Co-authored-by: Anuragkillswitch <[email protected]> Co-authored-by: dvora-h <[email protected]> Co-authored-by: dvora-h <[email protected]>
1 parent 906e413 commit cfdcfd8

File tree

4 files changed

+30
-1
lines changed

4 files changed

+30
-1
lines changed

redis/cluster.py

+8
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,13 @@ def parse_cluster_shards(resp, **options):
113113
return shards
114114

115115

116+
def parse_cluster_myshardid(resp, **options):
117+
"""
118+
Parse CLUSTER MYSHARDID response.
119+
"""
120+
return resp.decode("utf-8")
121+
122+
116123
PRIMARY = "primary"
117124
REPLICA = "replica"
118125
SLOT_ID = "slot-id"
@@ -341,6 +348,7 @@ class AbstractRedisCluster:
341348
CLUSTER_COMMANDS_RESPONSE_CALLBACKS = {
342349
"CLUSTER SLOTS": parse_cluster_slots,
343350
"CLUSTER SHARDS": parse_cluster_shards,
351+
"CLUSTER MYSHARDID": parse_cluster_myshardid,
344352
}
345353

346354
RESULT_CALLBACKS = dict_merge(

redis/commands/cluster.py

+8-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@
4545
if TYPE_CHECKING:
4646
from redis.asyncio.cluster import TargetNodesT
4747

48-
4948
# Not complete, but covers the major ones
5049
# https://redis.io/commands
5150
READ_COMMANDS = frozenset(
@@ -634,6 +633,14 @@ def cluster_shards(self, target_nodes=None):
634633
"""
635634
return self.execute_command("CLUSTER SHARDS", target_nodes=target_nodes)
636635

636+
def cluster_myshardid(self, target_nodes=None):
637+
"""
638+
Returns the shard ID of the node.
639+
640+
For more information see https://redis.io/commands/cluster-myshardid/
641+
"""
642+
return self.execute_command("CLUSTER MYSHARDID", target_nodes=target_nodes)
643+
637644
def cluster_links(self, target_node: "TargetNodesT") -> ResponseT:
638645
"""
639646
Each node in a Redis Cluster maintains a pair of long-lived TCP link with each

tests/test_asyncio/test_cluster.py

+7
Original file line numberDiff line numberDiff line change
@@ -1006,6 +1006,13 @@ async def test_cluster_myid(self, r: RedisCluster) -> None:
10061006
myid = await r.cluster_myid(node)
10071007
assert len(myid) == 40
10081008

1009+
@skip_if_server_version_lt("7.2.0")
1010+
@skip_if_redis_enterprise()
1011+
async def test_cluster_myshardid(self, r: RedisCluster) -> None:
1012+
node = r.get_random_node()
1013+
myshardid = await r.cluster_myshardid(node)
1014+
assert len(myshardid) == 40
1015+
10091016
@skip_if_redis_enterprise()
10101017
async def test_cluster_slots(self, r: RedisCluster) -> None:
10111018
mock_all_nodes_resp(r, default_cluster_slots)

tests/test_cluster.py

+7
Original file line numberDiff line numberDiff line change
@@ -1162,6 +1162,13 @@ def test_cluster_shards(self, r):
11621162
for attribute in node.keys():
11631163
assert attribute in attributes
11641164

1165+
@skip_if_server_version_lt("7.2.0")
1166+
@skip_if_redis_enterprise()
1167+
def test_cluster_myshardid(self, r):
1168+
myshardid = r.cluster_myshardid()
1169+
assert isinstance(myshardid, str)
1170+
assert len(myshardid) > 0
1171+
11651172
@skip_if_redis_enterprise()
11661173
def test_cluster_addslots(self, r):
11671174
node = r.get_random_node()

0 commit comments

Comments
 (0)