From b1b5a319e146c871f75344941baaf0f04494c18e Mon Sep 17 00:00:00 2001 From: Alex Sharov Date: Fri, 20 May 2022 14:46:04 +0700 Subject: [PATCH] It's safe now to open snapshots at app start (#4216) --- eth/backend.go | 3 +++ turbo/app/snapshots.go | 49 +++--------------------------------------- 2 files changed, 6 insertions(+), 46 deletions(-) diff --git a/eth/backend.go b/eth/backend.go index 60c958378c8..4137091c65e 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -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 { diff --git a/turbo/app/snapshots.go b/turbo/app/snapshots.go index de183c9ab87..b5704a069de 100644 --- a/turbo/app/snapshots.go +++ b/turbo/app/snapshots.go @@ -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" @@ -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 { @@ -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 -}