@@ -67,19 +67,16 @@ func ParseClusterNode(content []byte) []*ClusterNodeInfo {
6767 continue
6868 }
6969
70- items := bytes .Split (line , []byte (" " ))
70+ items := bytes .Fields (line )
71+ if len (items ) < 8 {
72+ continue
73+ }
7174
7275 address := bytes .Split (items [1 ], []byte {'@' })
73- flag := bytes .Split (items [2 ], []byte {',' })
74- var role string
75- if len (flag ) > 1 {
76- role = string (flag [1 ])
77- } else {
78- role = string (flag [0 ])
79- }
76+ role := parseClusterNodeRole (items [2 ])
8077 var slot string
81- if len (items ) > 7 {
82- slot = string (items [7 ])
78+ if len (items ) > 8 {
79+ slot = string (items [8 ])
8380 }
8481 ret = append (ret , & ClusterNodeInfo {
8582 Id : string (items [0 ]),
@@ -96,13 +93,27 @@ func ParseClusterNode(content []byte) []*ClusterNodeInfo {
9693 return ret
9794}
9895
96+ func parseClusterNodeRole (flags []byte ) string {
97+ parts := bytes .Split (flags , []byte {',' })
98+ for _ , part := range parts {
99+ if bytes .Equal (part , []byte (TypeMaster )) || bytes .Equal (part , []byte (TypeSlave )) {
100+ return string (part )
101+ }
102+ }
103+
104+ if len (parts ) > 0 {
105+ return string (parts [0 ])
106+ }
107+ return ""
108+ }
109+
99110// needMaster: true(master), false(slave)
100111func ClusterNodeChoose (input []* ClusterNodeInfo , role string ) []* ClusterNodeInfo {
101112 ret := make ([]* ClusterNodeInfo , 0 , len (input ))
102113 for _ , ele := range input {
103114 if ele .Flags == TypeMaster && role == TypeMaster ||
104- ele .Flags == TypeSlave && role == TypeSlave ||
105- role == TypeAll {
115+ ele .Flags == TypeSlave && role == TypeSlave ||
116+ role == TypeAll {
106117 ret = append (ret , ele )
107118 }
108119 }
@@ -154,4 +165,4 @@ func CompareUnorderedList(a, b []string) bool {
154165 }
155166
156167 return true
157- }
168+ }
0 commit comments