Improvements to request refreshing
This commit is contained in:
parent
1201ccc53b
commit
ccce2dba13
22
client.go
22
client.go
|
@ -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.
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue