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 @@ -1285,9 +1285,9 @@ func TestMemberlist_UserData(t *testing.T) {
12851285
12861286 bindPort := m1 .config .BindPort
12871287
1288- bcasts := [][]byte {
1289- [] byte ( "test" ),
1290- [] byte ("foobar" ),
1288+ bcasts := make ( [][]byte , 256 )
1289+ for i := range bcasts {
1290+ bcasts [ i ] = [] byte (fmt . Sprintf ( "%d" , i ))
12911291 }
12921292
12931293 // Create a second node
Original file line number Diff line number Diff line change @@ -615,10 +615,12 @@ func (m *Memberlist) gossip() {
615615 m .logger .Printf ("[ERR] memberlist: Failed to send gossip to %s: %s" , addr , err )
616616 }
617617 } else {
618- // Otherwise create and send a compound message
619- compound := makeCompoundMessage (msgs )
620- if err := m .rawSendMsgPacket (node .FullAddress (), & node , compound .Bytes ()); err != nil {
621- m .logger .Printf ("[ERR] memberlist: Failed to send gossip to %s: %s" , addr , err )
618+ // Otherwise create and send one or more compound messages
619+ compounds := makeCompoundMessages (msgs )
620+ for _ , compound := range compounds {
621+ if err := m .rawSendMsgPacket (node .FullAddress (), & node , compound .Bytes ()); err != nil {
622+ m .logger .Printf ("[ERR] memberlist: Failed to send gossip to %s: %s" , addr , err )
623+ }
622624 }
623625 }
624626 }
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