diff --git a/erigon-lib/diagnostics/stages.go b/erigon-lib/diagnostics/stages.go index 026a65ec9af..72729ec1c0f 100644 --- a/erigon-lib/diagnostics/stages.go +++ b/erigon-lib/diagnostics/stages.go @@ -102,11 +102,12 @@ func (d *DiagnosticClient) runSyncStagesListListener(rootCtx context.Context) { case <-rootCtx.Done(): return case info := <-ch: - d.mu.Lock() - d.SetStagesList(info.StagesList) - d.mu.Unlock() - - d.saveSyncStagesToDB() + func() { + d.mu.Lock() + defer d.mu.Unlock() + d.SetStagesList(info.StagesList) + d.saveSyncStagesToDB() + }() } } }() diff --git a/erigon-lib/downloader/downloader.go b/erigon-lib/downloader/downloader.go index ee59b54e8b7..cc71029facc 100644 --- a/erigon-lib/downloader/downloader.go +++ b/erigon-lib/downloader/downloader.go @@ -288,7 +288,7 @@ func New(ctx context.Context, cfg *downloadercfg.Cfg, logger log.Logger, verbosi cfg.ClientConfig.WebTransport = requestHandler - db, c, m, torrentClient, err := openClient(ctx, cfg.Dirs.Downloader, cfg.Dirs.Snap, cfg.ClientConfig, cfg.MdbxWriteMap) + db, c, m, torrentClient, err := openClient(ctx, cfg.Dirs.Downloader, cfg.Dirs.Snap, cfg.ClientConfig, cfg.MdbxWriteMap, logger) if err != nil { return nil, fmt.Errorf("openClient: %w", err) } @@ -838,6 +838,7 @@ func (d *Downloader) mainLoop(silent bool) error { if ok && err == nil { _, _, err = addTorrentFile(d.ctx, ts, d.torrentClient, d.db, d.webseeds) if err != nil { + d.logger.Warn("[snapshots] addTorrentFile from webseed", "err", err) continue } } @@ -1092,10 +1093,10 @@ func (d *Downloader) mainLoop(silent bool) error { } } - d.lock.RLock() + d.lock.Lock() downloadingLen := len(d.downloading) d.stats.Downloading = int32(downloadingLen) - d.lock.RUnlock() + d.lock.Unlock() // the call interval of the loop (elapsed sec) used to get slots/sec for // calculating the number of files to download based on the loop speed @@ -2139,7 +2140,7 @@ func (d *Downloader) ReCalcStats(interval time.Duration) { } if !stats.Completed { - logger.Debug("[snapshots] info", + logger.Debug("[snapshots] download info", "len", len(torrents), "webTransfers", webTransfers, "torrent", torrentInfo, @@ -2717,7 +2718,7 @@ func (d *Downloader) StopSeeding(hash metainfo.Hash) error { func (d *Downloader) TorrentClient() *torrent.Client { return d.torrentClient } -func openClient(ctx context.Context, dbDir, snapDir string, cfg *torrent.ClientConfig, writeMap bool) (db kv.RwDB, c storage.PieceCompletion, m storage.ClientImplCloser, torrentClient *torrent.Client, err error) { +func openClient(ctx context.Context, dbDir, snapDir string, cfg *torrent.ClientConfig, writeMap bool, logger log.Logger) (db kv.RwDB, c storage.PieceCompletion, m storage.ClientImplCloser, torrentClient *torrent.Client, err error) { dbCfg := mdbx.NewMDBX(log.New()). Label(kv.DownloaderDB). WithTableCfg(func(defaultBuckets kv.TableCfg) kv.TableCfg { return kv.DownloaderTablesCfg }). @@ -2735,7 +2736,7 @@ func openClient(ctx context.Context, dbDir, snapDir string, cfg *torrent.ClientC return nil, nil, nil, nil, fmt.Errorf("torrentcfg.openClient: %w", err) } //c, err = NewMdbxPieceCompletion(db) - c, err = NewMdbxPieceCompletionBatch(db) + c, err = NewMdbxPieceCompletion(db, logger) if err != nil { return nil, nil, nil, nil, fmt.Errorf("torrentcfg.NewMdbxPieceCompletion: %w", err) } diff --git a/erigon-lib/downloader/downloadercfg/downloadercfg.go b/erigon-lib/downloader/downloadercfg/downloadercfg.go index 79a3ad9563f..9bec2049e7a 100644 --- a/erigon-lib/downloader/downloadercfg/downloadercfg.go +++ b/erigon-lib/downloader/downloadercfg/downloadercfg.go @@ -17,6 +17,7 @@ package downloadercfg import ( + "github.com/ledgerwatch/erigon-lib/common/dbg" "net" "net/url" "os" @@ -68,7 +69,7 @@ func Default() *torrent.ClientConfig { // better don't increase because erigon periodically producing "new seedable files" - and adding them to downloader. // it must not impact chain tip sync - so, limit resources to minimum by default. // but when downloader is started as a separated process - rise it to max - //torrentConfig.PieceHashersPerTorrent = max(1, runtime.NumCPU()-1) + torrentConfig.PieceHashersPerTorrent = dbg.EnvInt("DL_HASHERS", min(16, max(2, runtime.NumCPU()-2))) torrentConfig.MinDialTimeout = 6 * time.Second //default: 3s torrentConfig.HandshakesTimeout = 8 * time.Second //default: 4s diff --git a/erigon-lib/downloader/mdbx_piece_completion.go b/erigon-lib/downloader/mdbx_piece_completion.go index 32e38ea4d2d..849cdcea20a 100644 --- a/erigon-lib/downloader/mdbx_piece_completion.go +++ b/erigon-lib/downloader/mdbx_piece_completion.go @@ -19,12 +19,15 @@ package downloader import ( "context" "encoding/binary" + "sync" + "github.com/RoaringBitmap/roaring" "github.com/anacrolix/torrent/metainfo" "github.com/anacrolix/torrent/storage" "github.com/anacrolix/torrent/types/infohash" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/mdbx" + "github.com/ledgerwatch/erigon-lib/log/v3" ) const ( @@ -33,17 +36,37 @@ const ( ) type mdbxPieceCompletion struct { - db kv.RwDB + db *mdbx.MdbxKV + mu sync.RWMutex + completed map[infohash.T]*roaring.Bitmap + flushed map[infohash.T]*roaring.Bitmap + logger log.Logger } var _ storage.PieceCompletion = (*mdbxPieceCompletion)(nil) -func NewMdbxPieceCompletion(db kv.RwDB) (ret storage.PieceCompletion, err error) { - ret = &mdbxPieceCompletion{db: db} +func NewMdbxPieceCompletion(db kv.RwDB, logger log.Logger) (ret storage.PieceCompletion, err error) { + ret = &mdbxPieceCompletion{ + db: db.(*mdbx.MdbxKV), + logger: logger, + completed: map[infohash.T]*roaring.Bitmap{}, + flushed: map[infohash.T]*roaring.Bitmap{}} return } -func (m mdbxPieceCompletion) Get(pk metainfo.PieceKey) (cn storage.Completion, err error) { +func (m *mdbxPieceCompletion) Get(pk metainfo.PieceKey) (cn storage.Completion, err error) { + m.mu.RLock() + if completed, ok := m.completed[pk.InfoHash]; ok { + if completed.Contains(uint32(pk.Index)) { + m.mu.RUnlock() + return storage.Completion{ + Complete: true, + Ok: true, + }, nil + } + } + m.mu.RUnlock() + err = m.db.View(context.Background(), func(tx kv.Tx) error { var key [infohash.Size + 4]byte copy(key[:], pk.InfoHash[:]) @@ -66,11 +89,14 @@ func (m mdbxPieceCompletion) Get(pk metainfo.PieceKey) (cn storage.Completion, e return } -func (m mdbxPieceCompletion) Set(pk metainfo.PieceKey, b bool) error { +func (m *mdbxPieceCompletion) Set(pk metainfo.PieceKey, b bool) error { if c, err := m.Get(pk); err == nil && c.Ok && c.Complete == b { return nil } + m.mu.Lock() + defer m.mu.Unlock() + var tx kv.RwTx var err error // On power-off recent "no-sync" txs may be lost. @@ -84,27 +110,29 @@ func (m mdbxPieceCompletion) Set(pk metainfo.PieceKey, b bool) error { // 1K fsyncs/2minutes it's quite expensive, but even on cloud (high latency) drive it allow download 100mb/s // and Erigon doesn't do anything when downloading snapshots if b { - tx, err = m.db.BeginRwNosync(context.Background()) - if err != nil { - return err + completed, ok := m.completed[pk.InfoHash] + + if !ok { + completed = &roaring.Bitmap{} + m.completed[pk.InfoHash] = completed } - } else { - tx, err = m.db.BeginRw(context.Background()) - if err != nil { - return err + + completed.Add(uint32(pk.Index)) + + if flushed, ok := m.flushed[pk.InfoHash]; !ok || !flushed.Contains(uint32(pk.Index)) { + return nil } } + + tx, err = m.db.BeginRw(context.Background()) + if err != nil { + return err + } + defer tx.Rollback() - var key [infohash.Size + 4]byte - copy(key[:], pk.InfoHash[:]) - binary.BigEndian.PutUint32(key[infohash.Size:], uint32(pk.Index)) + err = putCompletion(tx, pk.InfoHash, uint32(pk.Index), b) - v := []byte(incomplete) - if b { - v = []byte(complete) - } - err = tx.Put(kv.BittorrentCompletion, key[:], v) if err != nil { return err } @@ -112,63 +140,72 @@ func (m mdbxPieceCompletion) Set(pk metainfo.PieceKey, b bool) error { return tx.Commit() } -func (m *mdbxPieceCompletion) Close() error { - m.db.Close() - return nil -} +func putCompletion(tx kv.RwTx, infoHash infohash.T, index uint32, c bool) error { + var key [infohash.Size + 4]byte + copy(key[:], infoHash[:]) + binary.BigEndian.PutUint32(key[infohash.Size:], index) -type mdbxPieceCompletionBatch struct { - db *mdbx.MdbxKV + v := []byte(incomplete) + if c { + v = []byte(complete) + } + //fmt.Println("PUT", infoHash, index, c) + return tx.Put(kv.BittorrentCompletion, key[:], v) } -var _ storage.PieceCompletion = (*mdbxPieceCompletionBatch)(nil) +func (m *mdbxPieceCompletion) Flushed(infoHash infohash.T, flushed *roaring.Bitmap) { + m.mu.Lock() + defer m.mu.Unlock() -func NewMdbxPieceCompletionBatch(db kv.RwDB) (ret storage.PieceCompletion, err error) { - ret = &mdbxPieceCompletionBatch{db: db.(*mdbx.MdbxKV)} - return + tx, err := m.db.BeginRw(context.Background()) + + if err != nil { + m.logger.Warn("[snapshots] failed to flush piece completions", "hash", infoHash, err, err) + return + } + + defer tx.Rollback() + + m.putFlushed(tx, infoHash, flushed) + + err = tx.Commit() + + if err != nil { + m.logger.Warn("[snapshots] failed to flush piece completions", "hash", infoHash, err, err) + } } -func (m *mdbxPieceCompletionBatch) Get(pk metainfo.PieceKey) (cn storage.Completion, err error) { - err = m.db.View(context.Background(), func(tx kv.Tx) error { - var key [infohash.Size + 4]byte - copy(key[:], pk.InfoHash[:]) - binary.BigEndian.PutUint32(key[infohash.Size:], uint32(pk.Index)) - cn.Ok = true - v, err := tx.GetOne(kv.BittorrentCompletion, key[:]) - if err != nil { - return err - } - switch string(v) { - case complete: - cn.Complete = true - case incomplete: - cn.Complete = false - default: - cn.Ok = false +func (m *mdbxPieceCompletion) putFlushed(tx kv.RwTx, infoHash infohash.T, flushed *roaring.Bitmap) { + if completed, ok := m.completed[infoHash]; ok { + setters := flushed.Clone() + setters.And(completed) + + if setters.GetCardinality() > 0 { + setters.Iterate(func(piece uint32) bool { + // TODO deal with error (? don't remove from bitset ?) + _ = putCompletion(tx, infoHash, piece, true) + return true + }) } - return nil - }) - return -} -func (m *mdbxPieceCompletionBatch) Set(pk metainfo.PieceKey, b bool) error { - if c, err := m.Get(pk); err == nil && c.Ok && c.Complete == b { - return nil + completed.AndNot(setters) + + if completed.IsEmpty() { + delete(m.completed, infoHash) + } } - var key [infohash.Size + 4]byte - copy(key[:], pk.InfoHash[:]) - binary.BigEndian.PutUint32(key[infohash.Size:], uint32(pk.Index)) - v := []byte(incomplete) - if b { - v = []byte(complete) + allFlushed, ok := m.flushed[infoHash] + + if !ok { + allFlushed = &roaring.Bitmap{} + m.flushed[infoHash] = allFlushed } - return m.db.Batch(func(tx kv.RwTx) error { - return tx.Put(kv.BittorrentCompletion, key[:], v) - }) + + allFlushed.Or(flushed) } -func (m *mdbxPieceCompletionBatch) Close() error { +func (m *mdbxPieceCompletion) Close() error { m.db.Close() return nil } diff --git a/erigon-lib/downloader/mdbx_piece_completion_test.go b/erigon-lib/downloader/mdbx_piece_completion_test.go index a594e3dd897..ee5fca0f783 100644 --- a/erigon-lib/downloader/mdbx_piece_completion_test.go +++ b/erigon-lib/downloader/mdbx_piece_completion_test.go @@ -20,6 +20,7 @@ import ( "testing" "github.com/ledgerwatch/erigon-lib/kv/memdb" + "github.com/ledgerwatch/erigon-lib/log/v3" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -29,32 +30,7 @@ import ( func TestMdbxPieceCompletion(t *testing.T) { db := memdb.NewTestDownloaderDB(t) - pc, err := NewMdbxPieceCompletion(db) - require.NoError(t, err) - defer pc.Close() - - pk := metainfo.PieceKey{} - - b, err := pc.Get(pk) - require.NoError(t, err) - assert.False(t, b.Ok) - - require.NoError(t, pc.Set(pk, false)) - - b, err = pc.Get(pk) - require.NoError(t, err) - assert.Equal(t, storage.Completion{Complete: false, Ok: true}, b) - - require.NoError(t, pc.Set(pk, true)) - - b, err = pc.Get(pk) - require.NoError(t, err) - assert.Equal(t, storage.Completion{Complete: true, Ok: true}, b) -} - -func TestMdbxPieceCompletionBatch(t *testing.T) { - db := memdb.NewTestDownloaderDB(t) - pc, err := NewMdbxPieceCompletionBatch(db) + pc, err := NewMdbxPieceCompletion(db, log.New()) require.NoError(t, err) defer pc.Close() diff --git a/erigon-lib/go.mod b/erigon-lib/go.mod index 28beb571106..ddbba5b00ac 100644 --- a/erigon-lib/go.mod +++ b/erigon-lib/go.mod @@ -55,8 +55,9 @@ require ( github.com/ianlancetaylor/cgosymbolizer v0.0.0-20240503222823-736c933a666d // indirect github.com/opencontainers/runtime-spec v1.2.0 // indirect github.com/pion/udp v0.1.4 // indirect - golang.org/x/mod v0.18.0 // indirect - golang.org/x/tools v0.22.0 // indirect + golang.org/x/mod v0.17.0 // indirect + golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 // indirect modernc.org/libc v1.50.4 // indirect modernc.org/memory v1.8.0 // indirect modernc.org/sqlite v1.29.8 // indirect @@ -142,7 +143,6 @@ require ( go.uber.org/goleak v1.3.0 // indirect golang.org/x/net v0.26.0 golang.org/x/text v0.16.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect modernc.org/mathutil v1.6.0 // indirect rsc.io/tmplfunc v0.0.3 // indirect @@ -150,7 +150,7 @@ require ( ) replace ( - github.com/anacrolix/torrent => github.com/erigontech/torrent v1.54.2-alpha-10 + github.com/anacrolix/torrent => github.com/erigontech/torrent v1.54.2-alpha-24 github.com/holiman/bloomfilter/v2 => github.com/AskAlexSharov/bloomfilter/v2 v2.0.8 github.com/tidwall/btree => github.com/AskAlexSharov/btree v1.6.2 ) diff --git a/erigon-lib/go.sum b/erigon-lib/go.sum index 0a2eda3df81..f9f6fbc4abc 100644 --- a/erigon-lib/go.sum +++ b/erigon-lib/go.sum @@ -146,8 +146,8 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/erigontech/mdbx-go v0.38.4 h1:S9T7mTe9KPcFe4dOoOtVdI6gPzht9y7wMnYfUBgrQLo= github.com/erigontech/mdbx-go v0.38.4/go.mod h1:IcOLQDPw3VM/asP6T5JVPPN4FHHgJtY16XfYjzWKVNI= -github.com/erigontech/torrent v1.54.2-alpha-10 h1:MqEorLDG5n2jsNAsSC+TKuZUyExO/KfGumHxh7GHG3o= -github.com/erigontech/torrent v1.54.2-alpha-10/go.mod h1:nYNeuR4xPlEl4CturFD9/KRXBRJEcJGqjegDNWakwG4= +github.com/erigontech/torrent v1.54.2-alpha-24 h1:LNfGFxRQHSND/r/rQ2ibFU2ghPGLJq41ZQdF5uRY8NY= +github.com/erigontech/torrent v1.54.2-alpha-24/go.mod h1:QtK2WLdEz1Iy1Dh/325UltdHU0nA1xujh2rN6aov6y0= github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= github.com/frankban/quicktest v1.9.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y= @@ -511,8 +511,8 @@ golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= -golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -626,8 +626,8 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= -golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -640,8 +640,8 @@ google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRn google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 h1:NnYq6UN9ReLM9/Y01KWNOWyI5xQ9kbIms5GGJVwS/Yc= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 h1:AgADTJarZTBqgjiUzRgfaBchgYB3/WFTC80GPwsMcRI= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= diff --git a/go.mod b/go.mod index fca99170c7c..8d532ebcfc6 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,8 @@ module github.com/ledgerwatch/erigon -go 1.21.5 +go 1.22 + +toolchain go1.22.2 require ( github.com/erigontech/mdbx-go v0.38.4 @@ -116,6 +118,8 @@ require ( github.com/tklauser/go-sysconf v0.3.14 // indirect github.com/tklauser/numcpus v0.8.0 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240515191416-fc5f0ca64291 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 // indirect ) require ( @@ -126,12 +130,12 @@ require ( github.com/anacrolix/chansync v0.3.0 // indirect github.com/anacrolix/dht/v2 v2.21.1 // indirect github.com/anacrolix/envpprof v1.3.0 // indirect - github.com/anacrolix/generics v0.0.0-20230816105729-c755655aee45 // indirect + github.com/anacrolix/generics v0.0.2-0.20240227122613-f95486179cab // indirect github.com/anacrolix/go-libutp v1.3.1 // indirect github.com/anacrolix/log v0.15.2 // indirect github.com/anacrolix/missinggo v1.3.0 // indirect github.com/anacrolix/missinggo/perf v1.0.0 // indirect - github.com/anacrolix/missinggo/v2 v2.7.2-0.20230527121029-a582b4f397b9 // indirect + github.com/anacrolix/missinggo/v2 v2.7.3 // indirect github.com/anacrolix/mmsg v1.0.0 // indirect github.com/anacrolix/multiless v0.3.1-0.20221221005021-2d12701f83f7 // indirect github.com/anacrolix/stm v0.4.1-0.20221221005312-96d17df0e496 // indirect @@ -164,7 +168,7 @@ require ( github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/garslo/gogen v0.0.0-20170307003452-d6ebae628c7c // indirect github.com/go-llsqlite/adapter v0.0.0-20230927005056-7f5ce7f0c916 // indirect - github.com/go-llsqlite/crawshaw v0.4.0 // indirect + github.com/go-llsqlite/crawshaw v0.5.2-0.20240425034140-f30eb7704568 // indirect github.com/go-logr/logr v1.3.0 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect @@ -275,8 +279,6 @@ require ( golang.org/x/mod v0.18.0 // indirect golang.org/x/text v0.16.0 // indirect golang.org/x/tools v0.22.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240515191416-fc5f0ca64291 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 // indirect gopkg.in/cenkalti/backoff.v1 v1.1.0 // indirect gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect gotest.tools/v3 v3.5.1 // indirect @@ -292,6 +294,6 @@ require ( ) replace ( - github.com/anacrolix/torrent => github.com/erigontech/torrent v1.54.2-alpha-10 + github.com/anacrolix/torrent => github.com/erigontech/torrent v1.54.2-alpha-24 github.com/holiman/bloomfilter/v2 => github.com/AskAlexSharov/bloomfilter/v2 v2.0.8 ) diff --git a/go.sum b/go.sum index d4bceed443c..31a935303f4 100644 --- a/go.sum +++ b/go.sum @@ -103,8 +103,8 @@ github.com/anacrolix/envpprof v1.0.0/go.mod h1:KgHhUaQMc8cC0+cEflSgCFNFbKwi5h54g github.com/anacrolix/envpprof v1.1.0/go.mod h1:My7T5oSqVfEn4MD4Meczkw/f5lSIndGAKu/0SM/rkf4= github.com/anacrolix/envpprof v1.3.0 h1:WJt9bpuT7A/CDCxPOv/eeZqHWlle/Y0keJUvc6tcJDk= github.com/anacrolix/envpprof v1.3.0/go.mod h1:7QIG4CaX1uexQ3tqd5+BRa/9e2D02Wcertl6Yh0jCB0= -github.com/anacrolix/generics v0.0.0-20230816105729-c755655aee45 h1:Kmcl3I9K2+5AdnnR7hvrnVT0TLeFWWMa9bxnm55aVIg= -github.com/anacrolix/generics v0.0.0-20230816105729-c755655aee45/go.mod h1:ff2rHB/joTV03aMSSn/AZNnaIpUw0h3njetGsaXcMy8= +github.com/anacrolix/generics v0.0.2-0.20240227122613-f95486179cab h1:MvuAC/UJtcohN6xWc8zYXSZfllh1LVNepQ0R3BCX5I4= +github.com/anacrolix/generics v0.0.2-0.20240227122613-f95486179cab/go.mod h1:ff2rHB/joTV03aMSSn/AZNnaIpUw0h3njetGsaXcMy8= github.com/anacrolix/go-libutp v1.3.1 h1:idJzreNLl+hNjGC3ZnUOjujEaryeOGgkwHLqSGoige0= github.com/anacrolix/go-libutp v1.3.1/go.mod h1:heF41EC8kN0qCLMokLBVkB8NXiLwx3t8R8810MTNI5o= github.com/anacrolix/log v0.3.0/go.mod h1:lWvLTqzAnCWPJA08T2HCstZi0L1y2Wyvm3FJgwU9jwU= @@ -126,8 +126,8 @@ github.com/anacrolix/missinggo/perf v1.0.0/go.mod h1:ljAFWkBuzkO12MQclXzZrosP5ur github.com/anacrolix/missinggo/v2 v2.2.0/go.mod h1:o0jgJoYOyaoYQ4E2ZMISVa9c88BbUBVQQW4QeRkNCGY= github.com/anacrolix/missinggo/v2 v2.5.1/go.mod h1:WEjqh2rmKECd0t1VhQkLGTdIWXO6f6NLjp5GlMZ+6FA= github.com/anacrolix/missinggo/v2 v2.5.2/go.mod h1:yNvsLrtZYRYCOI+KRH/JM8TodHjtIE/bjOGhQaLOWIE= -github.com/anacrolix/missinggo/v2 v2.7.2-0.20230527121029-a582b4f397b9 h1:W/oGeHhYwxueeiDjQfmK9G+X9M2xJgfTtow62v0TWAs= -github.com/anacrolix/missinggo/v2 v2.7.2-0.20230527121029-a582b4f397b9/go.mod h1:mIEtp9pgaXqt8VQ3NQxFOod/eQ1H0D1XsZzKUQfwtac= +github.com/anacrolix/missinggo/v2 v2.7.3 h1:Ee//CmZBMadeNiYB/hHo9ly2PFOEZ4Fhsbnug3rDAIE= +github.com/anacrolix/missinggo/v2 v2.7.3/go.mod h1:mIEtp9pgaXqt8VQ3NQxFOod/eQ1H0D1XsZzKUQfwtac= github.com/anacrolix/mmsg v0.0.0-20180515031531-a4a3ba1fc8bb/go.mod h1:x2/ErsYUmT77kezS63+wzZp8E3byYB0gzirM/WMBLfw= github.com/anacrolix/mmsg v1.0.0 h1:btC7YLjOn29aTUAExJiVUhQOuf/8rhm+/nWCMAnL3Hg= github.com/anacrolix/mmsg v1.0.0/go.mod h1:x8kRaJY/dCrY9Al0PEcj1mb/uFHwP6GCJ9fLl4thEPc= @@ -277,8 +277,8 @@ github.com/erigontech/mdbx-go v0.38.4 h1:S9T7mTe9KPcFe4dOoOtVdI6gPzht9y7wMnYfUBg github.com/erigontech/mdbx-go v0.38.4/go.mod h1:IcOLQDPw3VM/asP6T5JVPPN4FHHgJtY16XfYjzWKVNI= github.com/erigontech/silkworm-go v0.18.0 h1:j56p61xZHBFhZGH1OixlGU8KcfjHzcw9pjAfjmVsOZA= github.com/erigontech/silkworm-go v0.18.0/go.mod h1:O50ux0apICEVEGyRWiE488K8qz8lc3PA/SXbQQAc8SU= -github.com/erigontech/torrent v1.54.2-alpha-10 h1:MqEorLDG5n2jsNAsSC+TKuZUyExO/KfGumHxh7GHG3o= -github.com/erigontech/torrent v1.54.2-alpha-10/go.mod h1:nYNeuR4xPlEl4CturFD9/KRXBRJEcJGqjegDNWakwG4= +github.com/erigontech/torrent v1.54.2-alpha-24 h1:LNfGFxRQHSND/r/rQ2ibFU2ghPGLJq41ZQdF5uRY8NY= +github.com/erigontech/torrent v1.54.2-alpha-24/go.mod h1:QtK2WLdEz1Iy1Dh/325UltdHU0nA1xujh2rN6aov6y0= github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= github.com/fjl/gencodec v0.0.0-20220412091415-8bb9e558978c h1:CndMRAH4JIwxbW8KYq6Q+cGWcGHz0FjGR3QqcInWcW0= @@ -323,8 +323,8 @@ github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-llsqlite/adapter v0.0.0-20230927005056-7f5ce7f0c916 h1:OyQmpAN302wAopDgwVjgs2HkFawP9ahIEqkUYz7V7CA= github.com/go-llsqlite/adapter v0.0.0-20230927005056-7f5ce7f0c916/go.mod h1:DADrR88ONKPPeSGjFp5iEN55Arx3fi2qXZeKCYDpbmU= -github.com/go-llsqlite/crawshaw v0.4.0 h1:L02s2jZBBJj80xm1VkkdyB/JlQ/Fi0kLbNHfXA8yrec= -github.com/go-llsqlite/crawshaw v0.4.0/go.mod h1:/YJdV7uBQaYDE0fwe4z3wwJIZBJxdYzd38ICggWqtaE= +github.com/go-llsqlite/crawshaw v0.5.2-0.20240425034140-f30eb7704568 h1:3EpZo8LxIzF4q3BT+vttQQlRfA6uTtTb/cxVisWa5HM= +github.com/go-llsqlite/crawshaw v0.5.2-0.20240425034140-f30eb7704568/go.mod h1:/YJdV7uBQaYDE0fwe4z3wwJIZBJxdYzd38ICggWqtaE= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=