clear genesis state file when --(force-)clear-db is specified (#15883)

Co-authored-by: Kasey Kirkham <kasey@users.noreply.github.com>
This commit is contained in:
kasey
2025-10-17 09:03:15 -05:00
committed by GitHub
parent 0486631d73
commit fdb06ea461
5 changed files with 30 additions and 5 deletions

View File

@@ -2,11 +2,13 @@ package node
import (
"context"
"os"
"github.com/OffchainLabs/prysm/v6/beacon-chain/db/filesystem"
"github.com/OffchainLabs/prysm/v6/beacon-chain/db/kv"
"github.com/OffchainLabs/prysm/v6/beacon-chain/db/slasherkv"
"github.com/OffchainLabs/prysm/v6/cmd"
"github.com/OffchainLabs/prysm/v6/genesis"
"github.com/pkg/errors"
"github.com/urfave/cli/v2"
)
@@ -36,6 +38,22 @@ func (c *dbClearer) clearKV(ctx context.Context, db *kv.Store) (*kv.Store, error
return kv.NewKVStore(ctx, db.DatabasePath())
}
func (c *dbClearer) clearGenesis(dir string) error {
if !c.shouldProceed() {
return nil
}
gfile, err := genesis.FindStateFile(dir)
if err != nil {
return nil
}
if err := os.Remove(gfile.FilePath()); err != nil {
return errors.Wrapf(err, "genesis state file not removed: %s", gfile.FilePath())
}
return nil
}
func (c *dbClearer) clearBlobs(bs *filesystem.BlobStorage) error {
if !c.shouldProceed() {
return nil

View File

@@ -177,6 +177,9 @@ func New(cliCtx *cli.Context, cancel context.CancelFunc, opts ...Option) (*Beaco
}
beacon.db = kvdb
if err := dbClearer.clearGenesis(dataDir); err != nil {
return nil, errors.Wrap(err, "could not clear genesis state")
}
providers := append(beacon.GenesisProviders, kv.NewLegacyGenesisProvider(kvdb))
if err := genesis.Initialize(ctx, dataDir, providers...); err != nil {
return nil, errors.Wrap(err, "could not initialize genesis state")

View File

@@ -0,0 +1,2 @@
### Fixed
- Delete the genesis state file when --clear-db / --force-clear-db is specified.

View File

@@ -23,7 +23,7 @@ func Initialize(ctx context.Context, dir string, providers ...Provider) error {
setPkgVar(emb, true)
return nil
}
gd, err := findGenesisFile(dir)
gd, err := FindStateFile(dir)
if err == nil {
setPkgVar(gd, true)
return nil
@@ -65,7 +65,8 @@ func newGenesisData(st state.BeaconState, dir string) (GenesisData, error) {
}, nil
}
func findGenesisFile(dir string) (GenesisData, error) {
// FindStateFile searches for a valid genesis state file in the specified directory.
func FindStateFile(dir string) (GenesisData, error) {
if dir == "" {
return GenesisData{}, ErrFilePathUnset
}

View File

@@ -100,7 +100,8 @@ type GenesisData struct {
initialized bool
}
func (d GenesisData) filePath() string {
// FilePath returns the full path to the genesis state file.
func (d GenesisData) FilePath() string {
parts := [3]string{}
parts[genesisPart] = "genesis"
parts[timePart] = strconv.FormatInt(d.Time.Unix(), 10)
@@ -115,7 +116,7 @@ func persist(d GenesisData) error {
if d.FileDir == "" {
return ErrFilePathUnset
}
fpath := d.filePath()
fpath := d.FilePath()
sb, err := d.State.MarshalSSZ()
if err != nil {
return errors.Wrap(err, "marshal ssz")
@@ -144,7 +145,7 @@ func loadState() (state.BeaconState, error) {
stateMu.Lock()
defer stateMu.Unlock()
s, err := stateFromFile(data.filePath())
s, err := stateFromFile(data.FilePath())
if err != nil {
return nil, errors.Wrapf(err, "InitializeFromProtoUnsafePhase0")
}