]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Add a Context param to ClientImpl.OpenTorrent for logging
authorMatt Joiner <anacrolix@gmail.com>
Thu, 27 Jun 2024 04:34:54 +0000 (14:34 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Thu, 27 Jun 2024 04:34:54 +0000 (14:34 +1000)
This is very likely going to be a breaking change, but the alternative is a nightmare of backwards compatibility.

19 files changed:
bad_storage.go
client_test.go
request-strategy-impls_test.go
storage/bolt.go
storage/file.go
storage/file_test.go
storage/interface.go
storage/issue95_test.go
storage/issue96_test.go
storage/mmap.go
storage/mmap_test.go
storage/piece-resource.go
storage/safe-path_test.go
storage/sqlite/direct.go
storage/test/bench-piece-mark-complete.go
storage/wrappers.go
test/issue377_test.go
tests/issue-798/main.go
torrent.go

index fc15beb90762862c7e2f8b0c9fe39560d0a541eb..7a2537a6147603b79a808228883d3db8b6a61d65 100644 (file)
@@ -1,6 +1,7 @@
 package torrent
 
 import (
+       "context"
        "errors"
        "math/rand"
        "strings"
@@ -14,7 +15,11 @@ type badStorage struct{}
 
 var _ storage.ClientImpl = badStorage{}
 
-func (bs badStorage) OpenTorrent(*metainfo.Info, metainfo.Hash) (storage.TorrentImpl, error) {
+func (bs badStorage) OpenTorrent(
+       context.Context,
+       *metainfo.Info,
+       metainfo.Hash,
+) (storage.TorrentImpl, error) {
        return storage.TorrentImpl{
                Piece: bs.Piece,
        }, nil
index 781f04a914436e137ffb6d669fc3f57c8d0bfb2b..f4771ac11bff1eddeefbb3523cbf5704d9b14bf5 100644 (file)
@@ -1,6 +1,7 @@
 package torrent
 
 import (
+       "context"
        "encoding/binary"
        "fmt"
        "io"
@@ -413,7 +414,7 @@ func testAddTorrentPriorPieceCompletion(t *testing.T, alreadyCompleted bool, csf
        info, err := greetingMetainfo.UnmarshalInfo()
        require.NoError(t, err)
        ih := greetingMetainfo.HashInfoBytes()
-       greetingData, err := storage.NewClient(filePieceStore).OpenTorrent(&info, ih)
+       greetingData, err := storage.NewClient(filePieceStore).OpenTorrent(context.Background(), &info, ih)
        require.NoError(t, err)
        writeTorrentData(greetingData, info, []byte(testutil.GreetingFileContents))
        // require.Equal(t, len(testutil.GreetingFileContents), written)
index 322b9913332b53d7fd6ecc8a4036c8d626a020f0..aab3b34ef2afc5ca38e08e002849dc62219f8192 100644 (file)
@@ -1,6 +1,7 @@
 package torrent
 
 import (
+       "context"
        "io"
        "runtime"
        "testing"
@@ -68,6 +69,7 @@ type storageClient struct {
 }
 
 func (s *storageClient) OpenTorrent(
+       _ context.Context,
        info *metainfo.Info,
        infoHash metainfo.Hash,
 ) (storage.TorrentImpl, error) {
index 945b24995db936df6b401f3eb546c36c2d2d14d2..4186c82d3bbd7ebc1113a852a29fd0ed36ce4215 100644 (file)
@@ -4,6 +4,7 @@
 package storage
 
 import (
+       "context"
        "encoding/binary"
        "path/filepath"
        "time"
@@ -42,7 +43,11 @@ func (me *boltClient) Close() error {
        return me.db.Close()
 }
 
-func (me *boltClient) OpenTorrent(_ *metainfo.Info, infoHash metainfo.Hash) (TorrentImpl, error) {
+func (me *boltClient) OpenTorrent(
+       _ context.Context,
+       _ *metainfo.Info,
+       infoHash metainfo.Hash,
+) (TorrentImpl, error) {
        t := &boltTorrent{me, infoHash}
        return TorrentImpl{
                Piece: t.Piece,
index 54d1a62b72c706262d65159189ca6dacfb86a5b0..f9fe743a433964b1d7596789a3c7ce1a88bd77f3 100644 (file)
@@ -1,11 +1,14 @@
 package storage
 
 import (
+       "context"
        "fmt"
        "io"
+       "log/slog"
        "os"
        "path/filepath"
 
+       "github.com/anacrolix/log"
        "github.com/anacrolix/missinggo/v2"
 
        "github.com/anacrolix/torrent/common"
@@ -55,8 +58,14 @@ func (me fileClientImpl) Close() error {
        return me.opts.PieceCompletion.Close()
 }
 
-func (fs fileClientImpl) OpenTorrent(info *metainfo.Info, infoHash metainfo.Hash) (_ TorrentImpl, err error) {
+func (fs fileClientImpl) OpenTorrent(
+       ctx context.Context,
+       info *metainfo.Info,
+       infoHash metainfo.Hash,
+) (_ TorrentImpl, err error) {
        dir := fs.opts.TorrentDirMaker(fs.opts.ClientBaseDir, info, infoHash)
+       logger := log.ContextLogger(ctx).Slogger()
+       logger.DebugContext(ctx, "opened file torrent storage", slog.String("dir", dir))
        upvertedFiles := info.UpvertedFiles()
        files := make([]file, 0, len(upvertedFiles))
        for i, fileInfo := range upvertedFiles {
index aada91930e8c1bc6189c3a5ba119d6e91e78ce0e..103e828877f9036e6e914388bf5c16bc134ac40e 100644 (file)
@@ -2,6 +2,7 @@ package storage
 
 import (
        "bytes"
+       "context"
        "io"
        "os"
        "path/filepath"
@@ -24,7 +25,7 @@ func TestShortFile(t *testing.T) {
                PieceLength: missinggo.MiB,
                Pieces:      make([]byte, 20),
        }
-       ts, err := s.OpenTorrent(info, metainfo.Hash{})
+       ts, err := s.OpenTorrent(context.Background(), info, metainfo.Hash{})
        assert.NoError(t, err)
        f, err := os.Create(filepath.Join(td, "a"))
        require.NoError(t, err)
index 41b4835ef46911a4809081ebb00b337028afa2ba..981ed88d55d13ee1c5093475d8de7c4494a8d34d 100644 (file)
@@ -1,6 +1,7 @@
 package storage
 
 import (
+       "context"
        "io"
 
        g "github.com/anacrolix/generics"
@@ -15,7 +16,7 @@ type ClientImplCloser interface {
 
 // Represents data storage for an unspecified torrent.
 type ClientImpl interface {
-       OpenTorrent(info *metainfo.Info, infoHash metainfo.Hash) (TorrentImpl, error)
+       OpenTorrent(ctx context.Context, info *metainfo.Info, infoHash metainfo.Hash) (TorrentImpl, error)
 }
 
 type TorrentCapacity *func() (cap int64, capped bool)
index 5b484b30078019ec5b3ff4e5fab8c183a3e7d7c2..2beb416164a4bc9a287d624ec980d5e71829fd1c 100644 (file)
@@ -1,6 +1,7 @@
 package storage
 
 import (
+       "context"
        "testing"
 
        "github.com/anacrolix/missinggo/v2/resource"
@@ -19,10 +20,10 @@ func testIssue95(t *testing.T, ci ClientImpl) {
                PieceLength: 1,
        }
        c := NewClient(ci)
-       t1, err := c.OpenTorrent(&info, metainfo.HashBytes([]byte("a")))
+       t1, err := c.OpenTorrent(context.Background(), &info, metainfo.HashBytes([]byte("a")))
        require.NoError(t, err)
        defer t1.Close()
-       t2, err := c.OpenTorrent(&info, metainfo.HashBytes([]byte("b")))
+       t2, err := c.OpenTorrent(context.Background(), &info, metainfo.HashBytes([]byte("b")))
        require.NoError(t, err)
        defer t2.Close()
        t2p := t2.Piece(info.Piece(0))
index cac5d96b9350942f70add6b27d31bc5ba8d9b3da..5c43574d797413265921dd005ee4c63b57eadeba 100644 (file)
@@ -1,6 +1,7 @@
 package storage
 
 import (
+       "context"
        "testing"
 
        g "github.com/anacrolix/generics"
@@ -19,7 +20,7 @@ func testMarkedCompleteMissingOnRead(t *testing.T, csf func(string) ClientImplCl
                Files:       []metainfo.FileInfo{{Path: []string{"a"}, Length: 1}},
                Pieces:      make([]byte, 20),
        }
-       ts, err := cs.OpenTorrent(info, metainfo.Hash{})
+       ts, err := cs.OpenTorrent(context.Background(), info, metainfo.Hash{})
        require.NoError(t, err)
        p := ts.PieceWithHash(info.Piece(0), g.None[[]byte]())
        require.NoError(t, p.MarkComplete())
index f7536591fabb9db61df691b09556ff6f59f6b5b4..8af981996ff6cf218635110aa69f739f4991d657 100644 (file)
@@ -4,6 +4,7 @@
 package storage
 
 import (
+       "context"
        "errors"
        "fmt"
        "io"
@@ -34,7 +35,11 @@ func NewMMapWithCompletion(baseDir string, completion PieceCompletion) *mmapClie
        }
 }
 
-func (s *mmapClientImpl) OpenTorrent(info *metainfo.Info, infoHash metainfo.Hash) (_ TorrentImpl, err error) {
+func (s *mmapClientImpl) OpenTorrent(
+       _ context.Context,
+       info *metainfo.Info,
+       infoHash metainfo.Hash,
+) (_ TorrentImpl, err error) {
        span, err := mMapTorrent(info, s.baseDir)
        t := &mmapTorrentStorage{
                infoHash: infoHash,
index 54260ecb5cb8ea11856518eece3dec458a2f9531..c72f9a9cb289e206be84a6e8adfff10b8e390dd8 100644 (file)
@@ -1,6 +1,7 @@
 package storage
 
 import (
+       "context"
        "testing"
 
        qt "github.com/frankban/quicktest"
@@ -17,7 +18,7 @@ func TestMmapWindows(t *testing.T) {
        }()
        info, err := mi.UnmarshalInfo()
        c.Assert(err, qt.IsNil)
-       ts, err := cs.OpenTorrent(&info, mi.HashInfoBytes())
+       ts, err := cs.OpenTorrent(context.Background(), &info, mi.HashInfoBytes())
        c.Assert(err, qt.IsNil)
        defer func() {
                c.Check(ts.Close(), qt.IsNil)
index 80b7f05f124c2536a5109a0af18999b98cf65038..51a8f0273b3302473d55b75a89ca506ba79b0a5a 100644 (file)
@@ -2,6 +2,7 @@ package storage
 
 import (
        "bytes"
+       "context"
        "encoding/hex"
        "fmt"
        "io"
@@ -50,7 +51,11 @@ func (piecePerResourceTorrentImpl) Close() error {
        return nil
 }
 
-func (s piecePerResource) OpenTorrent(info *metainfo.Info, infoHash metainfo.Hash) (TorrentImpl, error) {
+func (s piecePerResource) OpenTorrent(
+       ctx context.Context,
+       info *metainfo.Info,
+       infoHash metainfo.Hash,
+) (TorrentImpl, error) {
        t := piecePerResourceTorrentImpl{
                s,
                make([]sync.RWMutex, info.NumPieces()),
index 452ab283ff6c73701b2fac0a3cc54c4543c54e95..13701e4b3e4e3321a717ebeab114ab3a888d9b07 100644 (file)
@@ -1,6 +1,7 @@
 package storage
 
 import (
+       "context"
        "fmt"
        "log"
        "path/filepath"
@@ -60,7 +61,7 @@ func TestFileOptsSafeFilePathHandling(t *testing.T) {
                                ClientBaseDir: t.TempDir(),
                        })
                        defer func() { c.Check(client.Close(), qt.IsNil) }()
-                       torImpl, err := client.OpenTorrent(&info, metainfo.Hash{})
+                       torImpl, err := client.OpenTorrent(context.Background(), &info, metainfo.Hash{})
                        if _case.expectErr {
                                c.Check(err, qt.Not(qt.IsNil))
                        } else {
index e4e6981ca8e1bab541a0ef0130bd5cf07a9d428d..0390d583afd14797ffd7a21268833e01cf2031c9 100644 (file)
@@ -4,6 +4,7 @@
 package sqliteStorage
 
 import (
+       "context"
        "encoding/hex"
        "io"
        "sync"
@@ -62,7 +63,11 @@ func (c *client) capacity() (cap int64, capped bool) {
        return
 }
 
-func (c *client) OpenTorrent(*metainfo.Info, metainfo.Hash) (storage.TorrentImpl, error) {
+func (c *client) OpenTorrent(
+       context.Context,
+       *metainfo.Info,
+       metainfo.Hash,
+) (storage.TorrentImpl, error) {
        t := torrent{c.cache}
        capFunc := c.capacity
        return storage.TorrentImpl{PieceWithHash: t.Piece, Close: t.Close, Capacity: &capFunc}, nil
index 43390e33f07340bc6ccccba09bc78f8e7e3d1ff0..b665bf4160c702ab19622362f8f52d155eec351e 100644 (file)
@@ -2,6 +2,7 @@ package test_storage
 
 import (
        "bytes"
+       "context"
        "math/rand"
        "sync"
        "testing"
@@ -34,7 +35,7 @@ func BenchmarkPieceMarkComplete(
                Length:      pieceSize * int64(numPieces),
                Name:        "TorrentName",
        }
-       ti, err := ci.OpenTorrent(info, metainfo.Hash{})
+       ti, err := ci.OpenTorrent(context.Background(), info, metainfo.Hash{})
        c.Assert(err, qt.IsNil)
        tw := storage.Torrent{ti}
        defer tw.Close()
index 8dbfdd0aae97ed2cf7bf07787ba1b39f72800c41..92b3e785c9b94d95dd1140eae91d2407cb5e9a9e 100644 (file)
@@ -1,6 +1,7 @@
 package storage
 
 import (
+       "context"
        "io"
        "os"
 
@@ -18,8 +19,12 @@ func NewClient(cl ClientImpl) *Client {
        return &Client{cl}
 }
 
-func (cl Client) OpenTorrent(info *metainfo.Info, infoHash metainfo.Hash) (*Torrent, error) {
-       t, err := cl.ci.OpenTorrent(info, infoHash)
+func (cl Client) OpenTorrent(
+       ctx context.Context,
+       info *metainfo.Info,
+       infoHash metainfo.Hash,
+) (*Torrent, error) {
+       t, err := cl.ci.OpenTorrent(ctx, info, infoHash)
        if err != nil {
                return nil, err
        }
index c5bfae2c38634d6f7ff9388a3c924c6f46bc34e2..3d1025e3d480086e4fe8a142ccdd02b5decc43c6 100644 (file)
@@ -1,6 +1,7 @@
 package test
 
 import (
+       "context"
        "errors"
        "io"
        "os"
@@ -125,7 +126,11 @@ func (me *diskFullStorage) Close() error {
        return nil
 }
 
-func (d *diskFullStorage) OpenTorrent(info *metainfo.Info, infoHash metainfo.Hash) (storage.TorrentImpl, error) {
+func (d *diskFullStorage) OpenTorrent(
+       _ context.Context,
+       info *metainfo.Info,
+       infoHash metainfo.Hash,
+) (storage.TorrentImpl, error) {
        return storage.TorrentImpl{Piece: d.Piece, Close: d.Close}, nil
 }
 
index 2755d484e6fd071335db02b65713f92b339c72c8..6e17de568c9b827c2bef24a78eca560dfcdef272 100644 (file)
@@ -4,6 +4,7 @@ import (
        "fmt"
 
        app "github.com/anacrolix/gostdapp"
+
        "github.com/anacrolix/torrent"
 )
 
index 26c1714d2df73f05457a1670e2cf4341b2588f4e..3dd785cfaeabcaee41eb6f3e1271e78d0e127397 100644 (file)
@@ -511,7 +511,8 @@ func (t *Torrent) setInfo(info *metainfo.Info) error {
        }
        if t.storageOpener != nil {
                var err error
-               t.storage, err = t.storageOpener.OpenTorrent(info, *t.canonicalShortInfohash())
+               ctx := log.ContextWithLogger(context.Background(), t.logger)
+               t.storage, err = t.storageOpener.OpenTorrent(ctx, info, *t.canonicalShortInfohash())
                if err != nil {
                        return fmt.Errorf("error opening torrent storage: %s", err)
                }