@@ -2628,8 +2628,9 @@ func (cmd *ScanCmd) Iterator() *ScanIterator {
2628
2628
//------------------------------------------------------------------------------
2629
2629
2630
2630
type ClusterNode struct {
2631
- ID string
2632
- Addr string
2631
+ ID string
2632
+ Addr string
2633
+ NetworkingMetadata map [string ]string
2633
2634
}
2634
2635
2635
2636
type ClusterSlot struct {
@@ -2700,8 +2701,8 @@ func (cmd *ClusterSlotsCmd) readReply(rd *proto.Reader) error {
2700
2701
if err != nil {
2701
2702
return nil , err
2702
2703
}
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 )
2705
2706
return nil , err
2706
2707
}
2707
2708
@@ -2717,13 +2718,36 @@ func (cmd *ClusterSlotsCmd) readReply(rd *proto.Reader) error {
2717
2718
2718
2719
nodes [j ].Addr = net .JoinHostPort (ip , port )
2719
2720
2720
- if n = = 3 {
2721
+ if n > = 3 {
2721
2722
id , err := rd .ReadString ()
2722
2723
if err != nil {
2723
2724
return nil , err
2724
2725
}
2725
2726
nodes [j ].ID = id
2726
2727
}
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
+ }
2727
2751
}
2728
2752
2729
2753
cmd .val [i ] = ClusterSlot {
0 commit comments