mirror of
https://github.com/ipfs/kubo.git
synced 2025-09-10 05:52:20 +08:00

refactor: peerRequestQueue it's a mistake to make one queue to fit all. Go's lack of algebraic types turns a generalized queue into a monstrosity of type checking/casting. Better to have individual queues for individual purposes. Conflicts: exchange/bitswap/decision/bench_test.go exchange/bitswap/decision/tasks/task_queue.go fix(bitswap.decision.PRQ): if peers match, always return result of pri comparison fix(bitswap.decision.Engine): push to the queue before notifying TOCTOU bug 1. client notifies 2. worker checks (finds nil) 3. worker sleeps 3. client pushes (worker missed the update) test(PQ): improve documentation and add test test(bitswap.decision.Engine): handling received messages License: MIT Signed-off-by: Brian Tiger Chow <brian@perfmode.com>
27 lines
639 B
Go
27 lines
639 B
Go
package decision
|
|
|
|
import (
|
|
"math"
|
|
"testing"
|
|
|
|
"github.com/jbenet/go-ipfs/exchange/bitswap/wantlist"
|
|
"github.com/jbenet/go-ipfs/p2p/peer"
|
|
"github.com/jbenet/go-ipfs/util"
|
|
"github.com/jbenet/go-ipfs/util/testutil"
|
|
)
|
|
|
|
// FWIW: At the time of this commit, including a timestamp in task increases
|
|
// time cost of Push by 3%.
|
|
func BenchmarkTaskQueuePush(b *testing.B) {
|
|
q := newPRQ()
|
|
peers := []peer.ID{
|
|
testutil.RandPeerIDFatal(b),
|
|
testutil.RandPeerIDFatal(b),
|
|
testutil.RandPeerIDFatal(b),
|
|
}
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
q.Push(wantlist.Entry{Key: util.Key(i), Priority: math.MaxInt32}, peers[i%len(peers)])
|
|
}
|
|
}
|