@@ -113,8 +113,8 @@ func (r *recallWantlist) RemoveType(c cid.Cid, wtype pb.Message_Wantlist_WantTyp
113
113
r .pending .RemoveType (c , wtype )
114
114
}
115
115
116
- // Sent moves the want from the pending to the sent list
117
- func (r * recallWantlist ) Sent (e bsmsg .Entry ) {
116
+ // MarkSent moves the want from the pending to the sent list
117
+ func (r * recallWantlist ) MarkSent (e wantlist .Entry ) {
118
118
r .pending .RemoveType (e .Cid , e .WantType )
119
119
r .sent .Add (e .Cid , e .Priority , e .WantType )
120
120
}
@@ -439,7 +439,7 @@ func (mq *MessageQueue) sendMessage() {
439
439
for i := 0 ; i < maxRetries ; i ++ {
440
440
if mq .attemptSendAndRecovery (message ) {
441
441
// We were able to send successfully.
442
- onSent (wantlist )
442
+ onSent ()
443
443
444
444
mq .simulateDontHaveWithTimeout (wantlist )
445
445
@@ -540,7 +540,7 @@ func (mq *MessageQueue) pendingWorkCount() int {
540
540
}
541
541
542
542
// Convert the lists of wants into a Bitswap message
543
- func (mq * MessageQueue ) extractOutgoingMessage (supportsHave bool ) (bsmsg.BitSwapMessage , func ([]bsmsg. Entry )) {
543
+ func (mq * MessageQueue ) extractOutgoingMessage (supportsHave bool ) (bsmsg.BitSwapMessage , func ()) {
544
544
mq .wllock .Lock ()
545
545
defer mq .wllock .Unlock ()
546
546
@@ -566,6 +566,7 @@ func (mq *MessageQueue) extractOutgoingMessage(supportsHave bool) (bsmsg.BitSwap
566
566
}
567
567
568
568
// Add each regular want-have / want-block to the message
569
+ peerSent := make ([]wantlist.Entry , 0 , len (peerEntries ))
569
570
for i := 0 ; i < len (peerEntries ) && msgSize < mq .maxMessageSize ; i ++ {
570
571
e := peerEntries [i ]
571
572
// If the remote peer doesn't support HAVE / DONT_HAVE messages,
@@ -574,11 +575,13 @@ func (mq *MessageQueue) extractOutgoingMessage(supportsHave bool) (bsmsg.BitSwap
574
575
mq .peerWants .RemoveType (e .Cid , pb .Message_Wantlist_Have )
575
576
} else {
576
577
msgSize += mq .msg .AddEntry (e .Cid , e .Priority , e .WantType , true )
578
+ peerSent = append (peerSent , e )
577
579
}
578
580
}
579
581
580
582
// Add each broadcast want-have to the message
581
- for i := 0 ; i < len (bcstEntries ) && msgSize < mq .maxMessageSize ; i ++ {
583
+ bcstSentCount := 0
584
+ for ; bcstSentCount < len (bcstEntries ) && msgSize < mq .maxMessageSize ; bcstSentCount ++ {
582
585
// Broadcast wants are sent as want-have
583
586
wantType := pb .Message_Wantlist_Have
584
587
@@ -588,41 +591,27 @@ func (mq *MessageQueue) extractOutgoingMessage(supportsHave bool) (bsmsg.BitSwap
588
591
wantType = pb .Message_Wantlist_Block
589
592
}
590
593
591
- e := bcstEntries [i ]
594
+ e := bcstEntries [bcstSentCount ]
592
595
msgSize += mq .msg .AddEntry (e .Cid , e .Priority , wantType , false )
593
596
}
594
597
595
598
// Called when the message has been successfully sent.
596
- onMessageSent := func (wantlist []bsmsg.Entry ) {
597
- bcst := keysToSet (bcstEntries )
598
- prws := keysToSet (peerEntries )
599
-
599
+ onMessageSent := func () {
600
600
mq .wllock .Lock ()
601
601
defer mq .wllock .Unlock ()
602
602
603
603
// Move the keys from pending to sent
604
- for _ , e := range wantlist {
605
- if _ , ok := bcst [e .Cid ]; ok {
606
- mq .bcstWants .Sent (e )
607
- }
608
- if _ , ok := prws [e .Cid ]; ok {
609
- mq .peerWants .Sent (e )
610
- }
604
+ for i := 0 ; i < bcstSentCount ; i ++ {
605
+ mq .bcstWants .MarkSent (bcstEntries [i ])
606
+ }
607
+ for _ , e := range peerSent {
608
+ mq .peerWants .MarkSent (e )
611
609
}
612
610
}
613
611
614
612
return mq .msg , onMessageSent
615
613
}
616
614
617
- // Convert wantlist entries into a set of cids
618
- func keysToSet (wl []wantlist.Entry ) map [cid.Cid ]struct {} {
619
- set := make (map [cid.Cid ]struct {}, len (wl ))
620
- for _ , e := range wl {
621
- set [e .Cid ] = struct {}{}
622
- }
623
- return set
624
- }
625
-
626
615
func (mq * MessageQueue ) initializeSender () error {
627
616
if mq .sender != nil {
628
617
return nil
0 commit comments