Commit c444535f authored by Steven Allen's avatar Steven Allen

feat: prioritize more important wants

In case we're sending a _lot_ of wants:

* Prioritize cancels.
* Then targeted wants.
* Finally broadcast wants.
parent 6728add5
......@@ -551,19 +551,18 @@ func (mq *MessageQueue) extractOutgoingMessage(supportsHave bool) (bsmsg.BitSwap
// Size of the message so far
msgSize := 0
// Add each broadcast want-have to the message
for i := 0; i < len(bcstEntries) && msgSize < mq.maxMessageSize; i++ {
// Broadcast wants are sent as want-have
wantType := pb.Message_Wantlist_Have
// Always prioritize cancels, then targeted, then broadcast.
// If the remote peer doesn't support HAVE / DONT_HAVE messages,
// send a want-block instead
if !supportsHave {
wantType = pb.Message_Wantlist_Block
}
// Add each cancel to the message
cancels := mq.cancels.Keys()
for i := 0; i < len(cancels) && msgSize < mq.maxMessageSize; i++ {
c := cancels[i]
e := bcstEntries[i]
msgSize += mq.msg.AddEntry(e.Cid, e.Priority, wantType, false)
msgSize += mq.msg.Cancel(c)
// Clear the cancel - we make a best effort to let peers know about
// cancels but won't save them to resend if there's a failure.
mq.cancels.Remove(c)
}
// Add each regular want-have / want-block to the message
......@@ -578,16 +577,19 @@ func (mq *MessageQueue) extractOutgoingMessage(supportsHave bool) (bsmsg.BitSwap
}
}
// Add each cancel to the message
cancels := mq.cancels.Keys()
for i := 0; i < len(cancels) && msgSize < mq.maxMessageSize; i++ {
c := cancels[i]
// Add each broadcast want-have to the message
for i := 0; i < len(bcstEntries) && msgSize < mq.maxMessageSize; i++ {
// Broadcast wants are sent as want-have
wantType := pb.Message_Wantlist_Have
msgSize += mq.msg.Cancel(c)
// If the remote peer doesn't support HAVE / DONT_HAVE messages,
// send a want-block instead
if !supportsHave {
wantType = pb.Message_Wantlist_Block
}
// Clear the cancel - we make a best effort to let peers know about
// cancels but won't save them to resend if there's a failure.
mq.cancels.Remove(c)
e := bcstEntries[i]
msgSize += mq.msg.AddEntry(e.Cid, e.Priority, wantType, false)
}
// Called when the message has been successfully sent.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment