From: Matt Joiner Date: Tue, 3 Jan 2023 14:25:57 +0000 (+1100) Subject: Add a check that piece request order items are scanned in order X-Git-Tag: v1.48.1~7 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=a512c0df61927029978c600ebc9e6e7e26f89667;p=btrtrc.git Add a check that piece request order items are scanned in order It's not clear from btree documentation that scan should be ordered. --- diff --git a/request-strategy/order.go b/request-strategy/order.go index 3b7284b2..b009a108 100644 --- a/request-strategy/order.go +++ b/request-strategy/order.go @@ -4,6 +4,7 @@ import ( "bytes" "expvar" + "github.com/anacrolix/generics" "github.com/anacrolix/multiless" "github.com/anacrolix/torrent/metainfo" @@ -54,7 +55,16 @@ func GetRequestablePieces( storageLeft = &cap } var allTorrentsUnverifiedBytes int64 + var lastItem generics.Option[pieceRequestOrderItem] pro.tree.Scan(func(_i pieceRequestOrderItem) bool { + // Check that scan emits pieces in priority order. + if lastItem.Ok { + if _i.Less(&lastItem.Value) { + panic("scan not in order") + } + } + lastItem.Set(_i) + ih := _i.key.InfoHash var t = input.Torrent(ih) pieceLength := t.PieceLength()