Skip to content

Commit

Permalink
It's safe now to open snapshots at app start (#4216)
Browse files Browse the repository at this point in the history
  • Loading branch information
AskAlexSharov authored May 20, 2022
1 parent 7ecdf51 commit b1b5a31
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 46 deletions.
3 changes: 3 additions & 0 deletions eth/backend.go
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,9 @@ func New(stack *node.Node, config *ethconfig.Config, txpoolCfg txpool2.Config, l
var allSnapshots *snapshotsync.RoSnapshots
if config.Snapshot.Enabled {
allSnapshots = snapshotsync.NewRoSnapshots(config.Snapshot, config.SnapDir)
if err = allSnapshots.Reopen(); err != nil {
return nil, fmt.Errorf("[Snapshots] Reopen: %w", err)
}
blockReader = snapshotsync.NewBlockReaderWithSnapshots(allSnapshots)

if len(stack.Config().DownloaderAddr) > 0 {
Expand Down
49 changes: 3 additions & 46 deletions turbo/app/snapshots.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import (
"github.com/ledgerwatch/erigon-lib/kv/mdbx"
"github.com/ledgerwatch/erigon/cmd/hack/tool"
"github.com/ledgerwatch/erigon/cmd/utils"
"github.com/ledgerwatch/erigon/core/rawdb"
"github.com/ledgerwatch/erigon/eth/ethconfig"
"github.com/ledgerwatch/erigon/internal/debug"
"github.com/ledgerwatch/erigon/params"
Expand Down Expand Up @@ -250,7 +249,9 @@ func doRetireCommand(cliCtx *cli.Context) error {
chainConfig := tool.ChainConfigFromDB(chainDB)
chainID, _ := uint256.FromBig(chainConfig.ChainID)
snapshots := snapshotsync.NewRoSnapshots(cfg, snapDir)
snapshots.Reopen()
if err := snapshots.Reopen(); err != nil {
return err
}

workers := runtime.GOMAXPROCS(-1) - 1
if workers < 1 {
Expand Down Expand Up @@ -351,47 +352,3 @@ func snapshotBlocks(ctx context.Context, chainDB kv.RoDB, fromBlock, toBlock, bl
}
return nil
}

//nolint
func checkBlockSnapshot(chaindata string) error {
database := mdbx.MustOpen(chaindata)
defer database.Close()
datadir := path.Dir(chaindata)
chainConfig := tool.ChainConfigFromDB(database)
chainID, _ := uint256.FromBig(chainConfig.ChainID)
_ = chainID

cfg := ethconfig.NewSnapshotCfg(true, true)
snapshots := snapshotsync.NewRoSnapshots(cfg, filepath.Join(datadir, "snapshots"))
snapshots.Reopen()
//if err := snapshots.BuildIndices(context.Background(), *chainID); err != nil {
// panic(err)
//}

snBlockReader := snapshotsync.NewBlockReaderWithSnapshots(snapshots)
tx, err := database.BeginRo(context.Background())
if err != nil {
return err
}
defer tx.Rollback()

for i := uint64(0); i < snapshots.BlocksAvailable(); i++ {
hash, err := rawdb.ReadCanonicalHash(tx, i)
if err != nil {
return err
}
blockFromDB := rawdb.ReadBlock(tx, hash, i)
blockFromSnapshot, _, err := snBlockReader.BlockWithSenders(context.Background(), tx, hash, i)
if err != nil {
return err
}

if blockFromSnapshot.Hash() != blockFromDB.Hash() {
panic(i)
}
if i%1_000 == 0 {
log.Info(fmt.Sprintf("Block Num: %dK", i/1_000))
}
}
return nil
}

0 comments on commit b1b5a31

Please sign in to comment.