Only steal an odd request if the stealer more recently received a chunk
This helps break the stealing cycle during endgame, and lets us trickle the request to the peer conn with the best record. It might not be sufficient but works nice in testing so far.
This commit is contained in:
parent
7de7b986c9
commit
8c9a308c9a
@ -231,7 +231,14 @@ func (p *Peer) applyRequestState(next desiredRequestState) bool {
|
||||
continue
|
||||
}
|
||||
existing := t.requestingPeer(req)
|
||||
if existing != nil && existing != p && existing.uncancelledRequests() > current.Requests.GetCardinality() {
|
||||
if existing != nil && existing != p {
|
||||
// Don't steal from the poor.
|
||||
diff := int64(current.Requests.GetCardinality()) + 1 - (int64(existing.uncancelledRequests()) - 1)
|
||||
// Steal a request that leaves us with one more request than the existing peer
|
||||
// connection if the stealer more recently received a chunk.
|
||||
if diff > 1 || (diff == 1 && p.lastUsefulChunkReceived.Before(existing.lastUsefulChunkReceived)) {
|
||||
continue
|
||||
}
|
||||
t.cancelRequest(req)
|
||||
}
|
||||
more = p.mustRequest(req)
|
||||
|
Loading…
x
Reference in New Issue
Block a user