Skip to content

Commit

Permalink
downloader: support --chain parameter (ledgerwatch#1124)
Browse files Browse the repository at this point in the history
  • Loading branch information
AskAlexSharov authored and blxdyx committed Sep 13, 2023
1 parent 2b0ae18 commit 7b10675
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 11 deletions.
15 changes: 5 additions & 10 deletions downloader/downloader.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ import (
"github.com/ledgerwatch/erigon-lib/common/dir"
"github.com/ledgerwatch/erigon-lib/downloader/downloadercfg"
"github.com/ledgerwatch/erigon-lib/downloader/snaptype"
prototypes "github.com/ledgerwatch/erigon-lib/gointerfaces/types"
"github.com/ledgerwatch/erigon-lib/kv"
"github.com/ledgerwatch/erigon-lib/kv/mdbx"
"github.com/ledgerwatch/log/v3"
Expand Down Expand Up @@ -466,24 +465,20 @@ func (d *Downloader) VerifyData(ctx context.Context) error {
return d.db.Update(context.Background(), func(tx kv.RwTx) error { return nil })
}

func (d *Downloader) createMagnetLinkWithInfoHash(ctx context.Context, hash *prototypes.H160, name string, snapDir string) (bool, error) {
func (d *Downloader) AddInfoHashAsMagnetLink(ctx context.Context, infoHash metainfo.Hash, name string) error {
mi := &metainfo.MetaInfo{AnnounceList: Trackers}
if hash == nil {
return false, nil
}
infoHash := Proto2InfoHash(hash)
//log.Debug("[downloader] downloading torrent and seg file", "hash", infoHash)

if _, ok := d.torrentClient.Torrent(infoHash); ok {
//log.Debug("[downloader] torrent client related to hash found", "hash", infoHash)
return true, nil
return nil
}

magnet := mi.Magnet(&infoHash, &metainfo.Info{Name: name})
t, err := d.torrentClient.AddMagnet(magnet.String())
if err != nil {
//log.Warn("[downloader] add magnet link", "err", err)
return false, err
return err
}
t.DisallowDataDownload()
t.AllowDataUpload()
Expand All @@ -497,13 +492,13 @@ func (d *Downloader) createMagnetLinkWithInfoHash(ctx context.Context, hash *pro
}

mi := t.Metainfo()
if err := CreateTorrentFileIfNotExists(snapDir, t.Info(), &mi); err != nil {
if err := CreateTorrentFileIfNotExists(d.SnapDir(), t.Info(), &mi); err != nil {
log.Warn("[downloader] create torrent file", "err", err)
return
}
}(t)
//log.Debug("[downloader] downloaded both seg and torrent files", "hash", infoHash)
return false, nil
return nil
}

func seedableFiles(snapDir string) ([]string, error) {
Expand Down
2 changes: 1 addition & 1 deletion downloader/downloader_grpc_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ func (s *GrpcServer) Download(ctx context.Context, request *proto_downloader.Dow
continue
}

_, err := s.d.createMagnetLinkWithInfoHash(ctx, it.TorrentHash, it.Path, snapDir)
err := s.d.AddInfoHashAsMagnetLink(ctx, Proto2InfoHash(it.TorrentHash), it.Path)
if err != nil {
return nil, err
}
Expand Down
11 changes: 11 additions & 0 deletions downloader/snaptype/files.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,10 @@
package snaptype

import (
"encoding/hex"
"errors"
"fmt"
"github.com/anacrolix/torrent/metainfo"
"os"
"path/filepath"
"strconv"
Expand Down Expand Up @@ -215,3 +217,12 @@ func ParseDir(dir string) (res []FileInfo, err error) {

return res, nil
}

func Hex2InfoHash(in string) (infoHash metainfo.Hash) {
inHex, err := hex.DecodeString(in)
if err != nil {
panic(err)
}
copy(infoHash[:], inHex)
return infoHash
}

0 comments on commit 7b10675

Please sign in to comment.