Improvements to request refreshing

This commit is contained in:
Matt Joiner 2021-10-18 19:06:33 +11:00
parent 1201ccc53b
commit ccce2dba13
3 changed files with 25 additions and 18 deletions

View File

@ -957,15 +957,7 @@ func (cl *Client) runHandshookConn(c *PeerConn, t *Torrent) error {
defer t.dropConnection(c)
c.startWriter()
cl.sendInitialMessages(c, t)
c.updateRequestsTimer = time.AfterFunc(math.MaxInt64, func() {
if c.needRequestUpdate != "" {
return
}
if c.actualRequestState.Requests.IsEmpty() {
panic("updateRequestsTimer should have been stopped")
}
c.updateRequests("updateRequestsTimer")
})
c.updateRequestsTimer = time.AfterFunc(math.MaxInt64, c.updateRequestsTimerFunc)
c.updateRequestsTimer.Stop()
err := c.mainReadLoop()
if err != nil {
@ -974,6 +966,18 @@ func (cl *Client) runHandshookConn(c *PeerConn, t *Torrent) error {
return nil
}
func (c *PeerConn) updateRequestsTimerFunc() {
c.locker().Lock()
defer c.locker().Unlock()
if c.needRequestUpdate != "" {
return
}
if c.actualRequestState.Requests.IsEmpty() {
panic("updateRequestsTimer should have been stopped")
}
c.updateRequests("updateRequestsTimer")
}
// Maximum pending requests we allow peers to send us. If peer requests are buffered on read, this
// instructs the amount of memory that might be used to cache pending writes. Assuming 512KiB
// (1<<19) cached for sending, for 16KiB (1<<14) chunks.

View File

@ -1084,7 +1084,10 @@ func (c *PeerConn) mainReadLoop() (err error) {
if preservedCount != 0 {
// TODO: Yes this is a debug log but I'm not happy with the state of the logging lib
// right now.
log.Printf("%v requests were preserved while being choked", preservedCount)
log.Printf(
"%v requests were preserved while being choked (fast=%v)",
preservedCount,
c.fastEnabled())
torrent.Add("requestsPreservedThroughChoking", int64(preservedCount))
}
c.updateRequests("unchoked")

View File

@ -273,11 +273,12 @@ func (p *Peer) applyRequestState(next requestState) bool {
return true
}
if maxRequests(current.Requests.GetCardinality()) >= p.nominalMaxRequests() {
log.Printf("not assigning all requests [desired=%v, cancelled=%v, max=%v]",
next.Requests.GetCardinality(),
p.cancelledRequests.GetCardinality(),
p.nominalMaxRequests(),
)
//log.Printf("not assigning all requests [desired=%v, cancelled=%v, current=%v, max=%v]",
// next.Requests.GetCardinality(),
// p.cancelledRequests.GetCardinality(),
// current.Requests.GetCardinality(),
// p.nominalMaxRequests(),
//)
return false
}
var err error
@ -287,11 +288,10 @@ func (p *Peer) applyRequestState(next requestState) bool {
}
return more
})
p.updateRequestsTimer.Stop()
if more {
p.needRequestUpdate = ""
if current.Requests.IsEmpty() {
p.updateRequestsTimer.Stop()
} else {
if !current.Requests.IsEmpty() {
p.updateRequestsTimer.Reset(time.Second)
}
}