diff --git a/server/torr/preload.go b/server/torr/preload.go index c41bb59..576f557 100644 --- a/server/torr/preload.go +++ b/server/torr/preload.go @@ -63,7 +63,11 @@ func (t *Torrent) Preload(index int, size int64) { } }() - mb5 := int64(5 * 1024 * 1024) + // mb5 -> 8/16 MB + mb5 := int64(t.Info().PieceLength) + if (mb5 < 8 * 1024 * 1024) { + mb5 = 8 * 1024 * 1024 + } readerStart := file.NewReader() defer readerStart.Close() diff --git a/server/torr/storage/torrstor/cache.go b/server/torr/storage/torrstor/cache.go index d7b3f31..a7d8be5 100644 --- a/server/torr/storage/torrstor/cache.go +++ b/server/torr/storage/torrstor/cache.go @@ -40,8 +40,6 @@ type Cache struct { torrent *torrent.Torrent } -const FileRangeNotDelete = 5 * 1024 * 1024 - func NewCache(capacity int64, storage *Storage) *Cache { ret := &Cache{ capacity: capacity, @@ -251,7 +249,7 @@ func (c *Cache) getRemPieces() []*Piece { readerPos := r.getReaderPiece() readerRAHPos := r.getReaderRAHPiece() end := r.getPiecesRange().End - count := int(16777216 / c.pieceLength * 5) // 80 MB + count := int(16 * 1024 * 1024 / c.pieceLength * 5) // 80 MB if count > 40 { count = 40 } @@ -284,14 +282,21 @@ func (c *Cache) getRemPieces() []*Piece { } func (c *Cache) isIdInFileBE(ranges []Range, id int) bool { + + // keep 8/16 MB + FileRangeNotDelete := int64(c.pieceLength) + if (FileRangeNotDelete < 8 * 1024 * 1024) { + FileRangeNotDelete = 8 * 1024 * 1024 + } + for _, rng := range ranges { ss := int(rng.File.Offset() / c.pieceLength) - se := int((FileRangeNotDelete + rng.File.Offset()) / c.pieceLength) + se := int((rng.File.Offset() + FileRangeNotDelete) / c.pieceLength) es := int((rng.File.Offset() + rng.File.Length() - FileRangeNotDelete) / c.pieceLength) ee := int((rng.File.Offset() + rng.File.Length()) / c.pieceLength) - if id >= ss && id <= se || id >= es && id <= ee { + if id >= ss && id < se || id > es && id <= ee { return true } }