Skip to content

Commit

Permalink
Do not check pending count when it is already known that work is ready
Browse files Browse the repository at this point in the history
  • Loading branch information
gammazero committed Jan 29, 2025
1 parent 8a996e9 commit 80a149b
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 8 deletions.
12 changes: 4 additions & 8 deletions bitswap/client/internal/messagequeue/messagequeue.go
Original file line number Diff line number Diff line change
Expand Up @@ -481,7 +481,7 @@ func (mq *MessageQueue) runQueue() {
if mq.events != nil {
mq.events <- messageQueued
}
mq.sendIfReady()
mq.sendMessage()
hasWorkChan = nil
scheduleWork.Reset(sendMessageDelay)

Expand Down Expand Up @@ -520,12 +520,6 @@ func (mq *MessageQueue) signalWorkReady() {
}
}

func (mq *MessageQueue) sendIfReady() {
if mq.hasPendingWork() {
mq.sendMessage()
}
}

func (mq *MessageQueue) sendMessage() {
sender, err := mq.initializeSender()
if err != nil {
Expand All @@ -547,14 +541,16 @@ func (mq *MessageQueue) sendMessage() {
// After processing the message, clear out its fields to save memory
defer mq.msg.Reset(false)

var wantlist []bsmsg.Entry

for {
// Convert want lists to a Bitswap Message
message, onSent := mq.extractOutgoingMessage(supportsHave)
if message.Empty() {
return
}

wantlist := message.Wantlist()
wantlist = message.FillWantlist(wantlist)
mq.logOutgoingMessage(wantlist)

if err = sender.SendMsg(mq.ctx, message); err != nil {
Expand Down
13 changes: 13 additions & 0 deletions bitswap/message/message.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import (
// BitSwapMessage is the basic interface for interacting building, encoding,
// and decoding messages sent on the BitSwap protocol.
type BitSwapMessage interface {
FillWantlist([]Entry) []Entry
// Wantlist returns a slice of unique keys that represent data wanted by
// the sender.
Wantlist() []Entry
Expand Down Expand Up @@ -244,6 +245,18 @@ func (m *impl) Empty() bool {
return len(m.blocks) == 0 && len(m.wantlist) == 0 && len(m.blockPresences) == 0
}

func (m *impl) FillWantlist(out []Entry) []Entry {
if cap(out) < len(m.wantlist) {
out = make([]Entry, len(m.wantlist))
}
var i int
for _, e := range m.wantlist {
out[i] = *e
i++
}
return out
}

func (m *impl) Wantlist() []Entry {
out := make([]Entry, len(m.wantlist))
var i int
Expand Down

0 comments on commit 80a149b

Please sign in to comment.