From b1b5a319e146c871f75344941baaf0f04494c18e Mon Sep 17 00:00:00 2001
From: Alex Sharov <AskAlexSharov@gmail.com>
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 60c958378c..4137091c65 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 de183c9ab8..b5704a069d 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
-}
-- 
GitLab