good morning!!!!

Skip to content
Snippets Groups Projects
Unverified Commit 1bfc2ffd authored by Alex Sharov's avatar Alex Sharov Committed by GitHub
Browse files

Snapshots: add --to parameter to "erigon snapshots create" (#3194)

* save

* save
parent d4442af1
Branches
Tags
No related merge requests found
...@@ -14,6 +14,7 @@ import ( ...@@ -14,6 +14,7 @@ import (
"github.com/ledgerwatch/erigon/cmd/hack/tool" "github.com/ledgerwatch/erigon/cmd/hack/tool"
"github.com/ledgerwatch/erigon/cmd/utils" "github.com/ledgerwatch/erigon/cmd/utils"
"github.com/ledgerwatch/erigon/core/rawdb" "github.com/ledgerwatch/erigon/core/rawdb"
"github.com/ledgerwatch/erigon/params"
"github.com/ledgerwatch/erigon/turbo/snapshotsync" "github.com/ledgerwatch/erigon/turbo/snapshotsync"
"github.com/ledgerwatch/erigon/turbo/snapshotsync/parallelcompress" "github.com/ledgerwatch/erigon/turbo/snapshotsync/parallelcompress"
"github.com/ledgerwatch/erigon/turbo/snapshotsync/snapshothashes" "github.com/ledgerwatch/erigon/turbo/snapshotsync/snapshothashes"
...@@ -33,6 +34,7 @@ var snapshotCommand = cli.Command{ ...@@ -33,6 +34,7 @@ var snapshotCommand = cli.Command{
Flags: []cli.Flag{ Flags: []cli.Flag{
utils.DataDirFlag, utils.DataDirFlag,
SnapshotFromFlag, SnapshotFromFlag,
SnapshotToFlag,
SnapshotSegmentSizeFlag, SnapshotSegmentSizeFlag,
}, },
Description: `Create snapshots`, Description: `Create snapshots`,
...@@ -46,6 +48,11 @@ var ( ...@@ -46,6 +48,11 @@ var (
Usage: "From block number", Usage: "From block number",
Required: true, Required: true,
} }
SnapshotToFlag = cli.Uint64Flag{
Name: "to",
Usage: "To block number. Zero - means unlimited.",
Required: true,
}
SnapshotSegmentSizeFlag = cli.Uint64Flag{ SnapshotSegmentSizeFlag = cli.Uint64Flag{
Name: "segment.size", Name: "segment.size",
Usage: "Amount of blocks in each segment", Usage: "Amount of blocks in each segment",
...@@ -56,6 +63,7 @@ var ( ...@@ -56,6 +63,7 @@ var (
func doSnapshotCommand(ctx *cli.Context) error { func doSnapshotCommand(ctx *cli.Context) error {
fromBlock := ctx.Uint64(SnapshotFromFlag.Name) fromBlock := ctx.Uint64(SnapshotFromFlag.Name)
toBlock := ctx.Uint64(SnapshotToFlag.Name)
segmentSize := ctx.Uint64(SnapshotSegmentSizeFlag.Name) segmentSize := ctx.Uint64(SnapshotSegmentSizeFlag.Name)
if segmentSize < 1000 { if segmentSize < 1000 {
return fmt.Errorf("too small --segment.size %d", segmentSize) return fmt.Errorf("too small --segment.size %d", segmentSize)
...@@ -66,13 +74,18 @@ func doSnapshotCommand(ctx *cli.Context) error { ...@@ -66,13 +74,18 @@ func doSnapshotCommand(ctx *cli.Context) error {
chainDB := mdbx.MustOpen(path.Join(dataDir, "chaindata")) chainDB := mdbx.MustOpen(path.Join(dataDir, "chaindata"))
defer chainDB.Close() defer chainDB.Close()
if err := snapshotBlocks(chainDB, fromBlock, segmentSize, snapshotDir); err != nil { if err := snapshotBlocks(chainDB, fromBlock, toBlock, segmentSize, snapshotDir); err != nil {
log.Error("Error", "err", err) log.Error("Error", "err", err)
} }
return nil return nil
} }
func snapshotBlocks(chainDB kv.RoDB, fromBlock, blocksPerFile uint64, snapshotDir string) error { func snapshotBlocks(chainDB kv.RoDB, fromBlock, toBlock, blocksPerFile uint64, snapshotDir string) error {
var last uint64
if toBlock > 0 {
last = toBlock
} else {
lastChunk := func(tx kv.Tx, blocksPerFile uint64) (uint64, error) { lastChunk := func(tx kv.Tx, blocksPerFile uint64) (uint64, error) {
c, err := tx.Cursor(kv.BlockBody) c, err := tx.Cursor(kv.BlockBody)
if err != nil { if err != nil {
...@@ -83,27 +96,26 @@ func snapshotBlocks(chainDB kv.RoDB, fromBlock, blocksPerFile uint64, snapshotDi ...@@ -83,27 +96,26 @@ func snapshotBlocks(chainDB kv.RoDB, fromBlock, blocksPerFile uint64, snapshotDi
return 0, err return 0, err
} }
last := binary.BigEndian.Uint64(k) last := binary.BigEndian.Uint64(k)
// TODO: enable next condition (disabled for tests) if last > params.FullImmutabilityThreshold {
//if last > params.FullImmutabilityThreshold { last -= params.FullImmutabilityThreshold
// last -= params.FullImmutabilityThreshold } else {
//} else { last = 0
// last = 0 }
//}
last = last - last%blocksPerFile last = last - last%blocksPerFile
return last, nil return last, nil
} }
var last uint64
chainConfig := tool.ChainConfigFromDB(chainDB)
chainID, _ := uint256.FromBig(chainConfig.ChainID)
_ = chainID
if err := chainDB.View(context.Background(), func(tx kv.Tx) (err error) { if err := chainDB.View(context.Background(), func(tx kv.Tx) (err error) {
last, err = lastChunk(tx, blocksPerFile) last, err = lastChunk(tx, blocksPerFile)
return err return err
}); err != nil { }); err != nil {
return err return err
} }
}
chainConfig := tool.ChainConfigFromDB(chainDB)
chainID, _ := uint256.FromBig(chainConfig.ChainID)
_ = chainID
_ = os.MkdirAll(snapshotDir, fs.ModePerm) _ = os.MkdirAll(snapshotDir, fs.ModePerm)
log.Info("Last body number", "last", last) log.Info("Last body number", "last", last)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment