From: Matt Joiner Date: Thu, 16 Sep 2021 00:47:27 +0000 (+1000) Subject: requesting: Filter peers that can't be allocated chunks X-Git-Tag: v1.32.0~47 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=b757b62cf400473b3b75473a2959cd3f2bedfad5;p=btrtrc.git requesting: Filter peers that can't be allocated chunks --- diff --git a/request-strategy/order.go b/request-strategy/order.go index c0814df6..9b81a948 100644 --- a/request-strategy/order.go +++ b/request-strategy/order.go @@ -297,6 +297,13 @@ func (me *peersForPieceSorter) Less(_i, _j int) bool { func allocatePendingChunks(p requestablePiece, peers []*requestsPeer) { peersForPiece := makePeersForPiece(len(peers)) for _, peer := range peers { + if !peer.canRequestPiece(p.index) { + continue + } + if !peer.canFitRequest() { + peer.requestablePiecesRemaining-- + continue + } peersForPiece = append(peersForPiece, &peersForPieceRequests{ requestsInPiece: 0, requestsPeer: peer, @@ -317,7 +324,7 @@ func allocatePendingChunks(p requestablePiece, peers []*requestsPeer) { sortPeersForPiece := func(req *Request) { peersForPieceSorter.req = req sort.Sort(&peersForPieceSorter) - //ensureValidSortedPeersForPieceRequests(peersForPieceSorter) + //ensureValidSortedPeersForPieceRequests(&peersForPieceSorter) } // Chunks can be preassigned several times, if peers haven't been able to update their "actual" // with "next" request state before another request strategy run occurs.