Skip to content

Commit 52af8ba

Browse files
authored
update cluster slots reply checking logic for Redis 7 (#2108)
fix: update cluster slots reply checking logic for redis 7
1 parent 1980be0 commit 52af8ba

File tree

1 file changed

+29
-5
lines changed

1 file changed

+29
-5
lines changed

command.go

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2628,8 +2628,9 @@ func (cmd *ScanCmd) Iterator() *ScanIterator {
26282628
//------------------------------------------------------------------------------
26292629

26302630
type ClusterNode struct {
2631-
ID string
2632-
Addr string
2631+
ID string
2632+
Addr string
2633+
NetworkingMetadata map[string]string
26332634
}
26342635

26352636
type ClusterSlot struct {
@@ -2700,8 +2701,8 @@ func (cmd *ClusterSlotsCmd) readReply(rd *proto.Reader) error {
27002701
if err != nil {
27012702
return nil, err
27022703
}
2703-
if n != 2 && n != 3 {
2704-
err := fmt.Errorf("got %d elements in cluster info address, expected 2 or 3", n)
2704+
if n < 2 || n > 4 {
2705+
err := fmt.Errorf("got %d elements in cluster info address, shoud be between 2 and 4", n)
27052706
return nil, err
27062707
}
27072708

@@ -2717,13 +2718,36 @@ func (cmd *ClusterSlotsCmd) readReply(rd *proto.Reader) error {
27172718

27182719
nodes[j].Addr = net.JoinHostPort(ip, port)
27192720

2720-
if n == 3 {
2721+
if n >= 3 {
27212722
id, err := rd.ReadString()
27222723
if err != nil {
27232724
return nil, err
27242725
}
27252726
nodes[j].ID = id
27262727
}
2728+
if n == 4 {
2729+
networkingMetadata := make(map[string]string)
2730+
metadataLength, err := rd.ReadArrayLen()
2731+
if err != nil {
2732+
return nil, err
2733+
}
2734+
if metadataLength%2 != 0 {
2735+
err := fmt.Errorf("the array length of metadata must be a even number, current: %d", metadataLength)
2736+
return nil, err
2737+
}
2738+
for i := 0; i < metadataLength; i = i + 2 {
2739+
key, err := rd.ReadString()
2740+
if err != nil {
2741+
return nil, err
2742+
}
2743+
value, err := rd.ReadString()
2744+
if err != nil {
2745+
return nil, err
2746+
}
2747+
networkingMetadata[key] = value
2748+
}
2749+
nodes[j].NetworkingMetadata = networkingMetadata
2750+
}
27272751
}
27282752

27292753
cmd.val[i] = ClusterSlot{

0 commit comments

Comments
 (0)