]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Added comments and variables instead of raw reason strings
authorMark Holt <mark@distributed.vision>
Mon, 29 Apr 2024 21:05:49 +0000 (22:05 +0100)
committerMatt Joiner <anacrolix@gmail.com>
Fri, 3 May 2024 03:38:32 +0000 (13:38 +1000)
peer.go
requesting.go

diff --git a/peer.go b/peer.go
index 733aa018ef29727d10df21a44e5f3aa54e033cfb..41749710772c6f751868c242e730c8a85be50b10 100644 (file)
--- a/peer.go
+++ b/peer.go
@@ -468,6 +468,8 @@ func (cn *Peer) request(r RequestIndex) (more bool, err error) {
        return cn.peerImpl._request(ppReq), nil
 }
 
+var peerUpdateRequestsPeerCancelReason = "Peer.cancel"
+
 func (me *Peer) cancel(r RequestIndex) {
        if !me.deleteRequest(r) {
                panic("request not existing should have been guarded")
@@ -480,7 +482,7 @@ func (me *Peer) cancel(r RequestIndex) {
        }
        me.decPeakRequests()
        if me.isLowOnRequests() {
-               me.updateRequests("Peer.cancel")
+               me.updateRequests(peerUpdateRequestsPeerCancelReason)
        }
 }
 
@@ -566,6 +568,8 @@ func runSafeExtraneous(f func()) {
        }
 }
 
+var peerUpdateRequestsRemoteRejectReason = "Peer.remoteRejectedRequest"
+
 // Returns true if it was valid to reject the request.
 func (c *Peer) remoteRejectedRequest(r RequestIndex) bool {
        if c.deleteRequest(r) {
@@ -574,7 +578,7 @@ func (c *Peer) remoteRejectedRequest(r RequestIndex) bool {
                return false
        }
        if c.isLowOnRequests() {
-               c.updateRequests("Peer.remoteRejectedRequest")
+               c.updateRequests(peerUpdateRequestsRemoteRejectReason)
        }
        c.decExpectedChunkReceive(r)
        return true
index 7ecb4e222169bc0c8129e731ca8d3df393db3433..c5c797e7ebf52529d05e4d426f4226273fa52ee7 100644 (file)
@@ -312,13 +312,20 @@ func (p *Peer) applyRequestState(next desiredRequestState) {
                        panic("changed")
                }
 
-               if p.needRequestUpdate == "Peer.remoteRejectedRequest" {
+               // don't add requests on reciept of a reject - because this causes request back
+               // to potentially permanently unresponive peers - which just adds network noise.  If
+               // the peer can handle more requests it will send an "unchoked" message - which
+               // will cause it to get added back to the request queue
+               if p.needRequestUpdate == peerUpdateRequestsRemoteRejectReason {
                        continue
                }
 
                existing := t.requestingPeer(req)
                if existing != nil && existing != p {
-                       if p.needRequestUpdate == "Peer.cancel" {
+                       // don't steal on cancel - because this is triggered by t.cancelRequest below
+                       // which means that the cancelled can immediately try to steal back a request
+                       // it has lost which can lead to circular cancel/add processing
+                       if p.needRequestUpdate == peerUpdateRequestsPeerCancelReason {
                                continue
                        }