From: Matt Joiner Date: Fri, 24 Jan 2020 08:24:28 +0000 (+1100) Subject: Make use of requestStrategyDefaults in more places X-Git-Tag: v1.13.0~1 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=466cced13acbd8b325c4b52e26fdc4f47b62a03e;p=btrtrc.git Make use of requestStrategyDefaults in more places --- diff --git a/request_strategy.go b/request_strategy.go index fd403de9..880e4d7e 100644 --- a/request_strategy.go +++ b/request_strategy.go @@ -91,7 +91,7 @@ func RequestStrategyFuzzing() RequestStrategyMaker { return newRequestStrategyMaker(requestStrategyFuzzing{}) } -func (requestStrategyFastest) ShouldRequestWithoutBias(cn requestStrategyConnection) bool { +func (requestStrategyFastest) shouldRequestWithoutBias(cn requestStrategyConnection) bool { if cn.torrent().numReaders() == 0 { return false } @@ -107,6 +107,7 @@ func (requestStrategyFastest) ShouldRequestWithoutBias(cn requestStrategyConnect // Requests are strictly by piece priority, and not duplicated until duplicateRequestTimeout is // reached. type requestStrategyDuplicateRequestTimeout struct { + requestStrategyDefaults // How long to avoid duplicating a pending request. duplicateRequestTimeout time.Duration @@ -144,18 +145,10 @@ func (rs requestStrategyDuplicateRequestTimeout) hooks() requestStrategyHooks { } } -func defaultPiecePriority(cn requestStrategyConnection, piece pieceIndex, tpp piecePriority, prio int) int { +func (requestStrategyDefaults) piecePriority(cn requestStrategyConnection, piece pieceIndex, tpp piecePriority, prio int) int { return prio } -func (requestStrategyFastest) piecePriority(cn requestStrategyConnection, piece pieceIndex, tpp piecePriority, prio int) int { - return defaultPiecePriority(cn, piece, tpp, prio) -} - -func (requestStrategyDuplicateRequestTimeout) piecePriority(cn requestStrategyConnection, piece pieceIndex, tpp piecePriority, prio int) int { - return defaultPiecePriority(cn, piece, tpp, prio) -} - func (rs requestStrategyDuplicateRequestTimeout) iterUndirtiedChunks(p requestStrategyPiece, f func(chunkSpec) bool) bool { for i := pp.Integer(0); i < pp.Integer(p.numChunks()); i++ { if p.dirtyChunks().Get(bitmap.BitIndex(i)) { @@ -172,7 +165,7 @@ func (rs requestStrategyDuplicateRequestTimeout) iterUndirtiedChunks(p requestSt return true } -func defaultIterUndirtiedChunks(p requestStrategyPiece, f func(chunkSpec) bool) bool { +func (requestStrategyDefaults) iterUndirtiedChunks(p requestStrategyPiece, f func(chunkSpec) bool) bool { chunkIndices := p.dirtyChunks().Copy() chunkIndices.FlipRange(0, bitmap.BitIndex(p.numChunks())) return iter.ForPerm(chunkIndices.Len(), func(i int) bool { @@ -184,14 +177,6 @@ func defaultIterUndirtiedChunks(p requestStrategyPiece, f func(chunkSpec) bool) }) } -func (rs requestStrategyFuzzing) iterUndirtiedChunks(p requestStrategyPiece, f func(chunkSpec) bool) bool { - return defaultIterUndirtiedChunks(p, f) -} - -func (rs requestStrategyFastest) iterUndirtiedChunks(p requestStrategyPiece, f func(chunkSpec) bool) bool { - return defaultIterUndirtiedChunks(p, f) -} - func (requestStrategyFuzzing) piecePriority(cn requestStrategyConnection, piece pieceIndex, tpp piecePriority, prio int) int { switch tpp { case PiecePriorityNormal: @@ -225,31 +210,10 @@ func (rs requestStrategyFastest) iterPendingPieces(cn requestStrategyConnection, return defaultIterPendingPieces(rs, cn, cb) } -func defaultShouldRequestWithoutBias(cn requestStrategyConnection) bool { +func (requestStrategyDefaults) shouldRequestWithoutBias(cn requestStrategyConnection) bool { return false } -func (requestStrategyFastest) shouldRequestWithoutBias(cn requestStrategyConnection) bool { - if cn.torrent().numReaders() == 0 { - return false - } - if cn.torrent().numConns() == 1 { - return true - } - if cn.fastest() { - return true - } - return false -} - -func (requestStrategyFuzzing) shouldRequestWithoutBias(cn requestStrategyConnection) bool { - return defaultShouldRequestWithoutBias(cn) -} - -func (requestStrategyDuplicateRequestTimeout) shouldRequestWithoutBias(cn requestStrategyConnection) bool { - return defaultShouldRequestWithoutBias(cn) -} - func (rs requestStrategyDuplicateRequestTimeout) onSentRequest(r request) { rs.lastRequested[r] = time.AfterFunc(rs.duplicateRequestTimeout, func() { rs.timeoutLocker.Lock() @@ -280,17 +244,11 @@ func (rs requestStrategyDuplicateRequestTimeout) nominalMaxRequests(cn requestSt ), )) } -func defaultNominalMaxRequests(cn requestStrategyConnection) int { +func (requestStrategyDefaults) nominalMaxRequests(cn requestStrategyConnection) int { return int( max(64, cn.stats().ChunksReadUseful.Int64()-(cn.stats().ChunksRead.Int64()-cn.stats().ChunksReadUseful.Int64()))) } -func (rs requestStrategyFuzzing) nominalMaxRequests(cn requestStrategyConnection) int { - return defaultNominalMaxRequests(cn) -} -func (rs requestStrategyFastest) nominalMaxRequests(cn requestStrategyConnection) int { - return defaultNominalMaxRequests(cn) -} func (rs requestStrategyDuplicateRequestTimeout) wouldDuplicateRecent(r request) bool { // This piece has been requested on another connection, and the duplicate request timer is still