request_strategy.go | 54 ++++++----------------------------------------------- diff --git a/request_strategy.go b/request_strategy.go index fd403de9c762dc224770ad556ddb60be62f1676b..880e4d7e0d707191dd0aee8fa87e2f5086c1943a 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 @@ // 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 @@ sentRequest: rs.onSentRequest, } } -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 @@ } 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 { @@ -182,14 +175,6 @@ panic(err) } return f(p.chunkIndexRequest(pp.Integer(ci)).chunkSpec) }) -} - -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 { @@ -225,29 +210,8 @@ func (rs requestStrategyFastest) iterPendingPieces(cn requestStrategyConnection, cb func(pieceIndex) bool) bool { return defaultIterPendingPieces(rs, cn, cb) } -func defaultShouldRequestWithoutBias(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 - } +func (requestStrategyDefaults) shouldRequestWithoutBias(cn requestStrategyConnection) bool { 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) { @@ -280,16 +244,10 @@ cn.chunksReceivedWhileExpecting()*int64(rs.duplicateRequestTimeout)/expectingTime, ), )) } -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 {