From: Matt Joiner <anacrolix@gmail.com>
Date: Mon, 28 Apr 2025 00:42:00 +0000 (+1000)
Subject: Storage cap wasn't passed to piece resource implementation
X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=7763b16329b2c9f161a99cf01deee3fcee886810;p=btrtrc.git

Storage cap wasn't passed to piece resource implementation

This breaks the tests, because it was actually masking bad behaviour.
---

diff --git a/storage/piece-resource.go b/storage/piece-resource.go
index 9576fea5..404aec95 100644
--- a/storage/piece-resource.go
+++ b/storage/piece-resource.go
@@ -28,7 +28,7 @@ type ResourcePiecesOpts struct {
 	// Sized puts require being able to stream from a statement executed on another connection.
 	// Without them, we buffer the entire read and then put that.
 	NoSizedPuts bool
-	Capacity    *int64
+	Capacity    TorrentCapacity
 }
 
 func NewResourcePieces(p PieceProvider) ClientImpl {
@@ -60,7 +60,11 @@ func (s piecePerResource) OpenTorrent(
 		s,
 		make([]sync.RWMutex, info.NumPieces()),
 	}
-	return TorrentImpl{PieceWithHash: t.Piece, Close: t.Close}, nil
+	return TorrentImpl{
+		PieceWithHash: t.Piece,
+		Close:         t.Close,
+		Capacity:      s.opts.Capacity,
+	}, nil
 }
 
 func (s piecePerResourceTorrentImpl) Piece(p metainfo.Piece, pieceHash g.Option[[]byte]) PieceImpl {
diff --git a/test/transfer_test.go b/test/transfer_test.go
index 501872fd..6d3e460b 100644
--- a/test/transfer_test.go
+++ b/test/transfer_test.go
@@ -31,11 +31,15 @@ func newFileCacheClientStorageFactory(ps fileCacheClientStorageFactoryParams) St
 		if err != nil {
 			panic(err)
 		}
-		var sharedCapacity *int64
+		var capFuncPtr storage.TorrentCapacity
 		if ps.SetCapacity {
-			sharedCapacity = &ps.Capacity
 			fc.SetCapacity(ps.Capacity)
+			f := func() (cap int64, capped bool) {
+				return ps.Capacity, ps.SetCapacity
+			}
+			capFuncPtr = &f
 		}
+
 		return struct {
 			storage.ClientImpl
 			io.Closer
@@ -43,7 +47,7 @@ func newFileCacheClientStorageFactory(ps fileCacheClientStorageFactoryParams) St
 			storage.NewResourcePiecesOpts(
 				fc.AsResourceProvider(),
 				storage.ResourcePiecesOpts{
-					Capacity: sharedCapacity,
+					Capacity: capFuncPtr,
 				}),
 			io.NopCloser(nil),
 		}