File tree Expand file tree Collapse file tree 3 files changed +26
-7
lines changed
Expand file tree Collapse file tree 3 files changed +26
-7
lines changed Original file line number Diff line number Diff line change @@ -1200,9 +1200,9 @@ func TestMemberlist_UserData(t *testing.T) {
12001200
12011201 bindPort := m1 .config .BindPort
12021202
1203- bcasts := [][]byte {
1204- [] byte ( "test" ),
1205- [] byte ("foobar" ),
1203+ bcasts := make ( [][]byte , 256 )
1204+ for i := range bcasts {
1205+ bcasts [ i ] = [] byte (fmt . Sprintf ( "%d" , i ))
12061206 }
12071207
12081208 // Create a second node
Original file line number Diff line number Diff line change @@ -606,10 +606,12 @@ func (m *Memberlist) gossip() {
606606 m .logger .Printf ("[ERR] memberlist: Failed to send gossip to %s: %s" , addr , err )
607607 }
608608 } else {
609- // Otherwise create and send a compound message
610- compound := makeCompoundMessage (msgs )
611- if err := m .rawSendMsgPacket (node .FullAddress (), & node , compound .Bytes ()); err != nil {
612- m .logger .Printf ("[ERR] memberlist: Failed to send gossip to %s: %s" , addr , err )
609+ // Otherwise create and send one or more compound messages
610+ compounds := makeCompoundMessages (msgs )
611+ for _ , compound := range compounds {
612+ if err := m .rawSendMsgPacket (node .FullAddress (), & node , compound .Bytes ()); err != nil {
613+ m .logger .Printf ("[ERR] memberlist: Failed to send gossip to %s: %s" , addr , err )
614+ }
613615 }
614616 }
615617 }
Original file line number Diff line number Diff line change @@ -152,6 +152,23 @@ OUTER:
152152 return kNodes
153153}
154154
155+ // makeCompoundMessages takes a list of messages and packs
156+ // them into one or multiple messages based on the limitations
157+ // of compound messages (255 messages each).
158+ func makeCompoundMessages (msgs [][]byte ) []* bytes.Buffer {
159+ const maxMsgs = 255
160+ bufs := make ([]* bytes.Buffer , 0 , (len (msgs )+ (maxMsgs - 1 ))/ maxMsgs )
161+
162+ for ; len (msgs ) > maxMsgs ; msgs = msgs [maxMsgs :] {
163+ bufs = append (bufs , makeCompoundMessage (msgs [:maxMsgs ]))
164+ }
165+ if len (msgs ) > 0 {
166+ bufs = append (bufs , makeCompoundMessage (msgs ))
167+ }
168+
169+ return bufs
170+ }
171+
155172// makeCompoundMessage takes a list of messages and generates
156173// a single compound message containing all of them
157174func makeCompoundMessage (msgs [][]byte ) * bytes.Buffer {
You can’t perform that action at this time.
0 commit comments