@@ -2628,8 +2628,9 @@ func (cmd *ScanCmd) Iterator() *ScanIterator {
26282628//------------------------------------------------------------------------------
26292629
26302630type ClusterNode struct {
2631- ID string
2632- Addr string
2631+ ID string
2632+ Addr string
2633+ NetworkingMetadata map [string ]string
26332634}
26342635
26352636type 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