forked from cerc-io/plugeth
cmd/utils: fix a startup issue on deleted chaindata but dangling ancients (#27989)
This commit is contained in:
parent
bce5c46739
commit
00fead91c4
@ -2073,10 +2073,10 @@ func MakeChainDatabase(ctx *cli.Context, stack *node.Node, readonly bool) ethdb.
|
|||||||
// tryMakeReadOnlyDatabase try to open the chain database in read-only mode,
|
// tryMakeReadOnlyDatabase try to open the chain database in read-only mode,
|
||||||
// or fallback to write mode if the database is not initialized.
|
// or fallback to write mode if the database is not initialized.
|
||||||
func tryMakeReadOnlyDatabase(ctx *cli.Context, stack *node.Node) ethdb.Database {
|
func tryMakeReadOnlyDatabase(ctx *cli.Context, stack *node.Node) ethdb.Database {
|
||||||
// If datadir doesn't exist we need to open db in write-mode
|
// If the database doesn't exist we need to open it in write-mode to allow
|
||||||
// so database engine can create files.
|
// the engine to create files.
|
||||||
readonly := true
|
readonly := true
|
||||||
if !common.FileExist(stack.ResolvePath("chaindata")) {
|
if rawdb.PreexistingDatabase(stack.ResolvePath("chaindata")) == "" {
|
||||||
readonly = false
|
readonly = false
|
||||||
}
|
}
|
||||||
return MakeChainDatabase(ctx, stack, readonly)
|
return MakeChainDatabase(ctx, stack, readonly)
|
||||||
|
@ -326,10 +326,10 @@ const (
|
|||||||
dbLeveldb = "leveldb"
|
dbLeveldb = "leveldb"
|
||||||
)
|
)
|
||||||
|
|
||||||
// hasPreexistingDb checks the given data directory whether a database is already
|
// PreexistingDatabase checks the given data directory whether a database is already
|
||||||
// instantiated at that location, and if so, returns the type of database (or the
|
// instantiated at that location, and if so, returns the type of database (or the
|
||||||
// empty string).
|
// empty string).
|
||||||
func hasPreexistingDb(path string) string {
|
func PreexistingDatabase(path string) string {
|
||||||
if _, err := os.Stat(filepath.Join(path, "CURRENT")); err != nil {
|
if _, err := os.Stat(filepath.Join(path, "CURRENT")); err != nil {
|
||||||
return "" // No pre-existing db
|
return "" // No pre-existing db
|
||||||
}
|
}
|
||||||
@ -367,7 +367,7 @@ func openKeyValueDatabase(o OpenOptions) (ethdb.Database, error) {
|
|||||||
}
|
}
|
||||||
// Retrieve any pre-existing database's type and use that or the requested one
|
// Retrieve any pre-existing database's type and use that or the requested one
|
||||||
// as long as there's no conflict between the two types
|
// as long as there's no conflict between the two types
|
||||||
existingDb := hasPreexistingDb(o.Directory)
|
existingDb := PreexistingDatabase(o.Directory)
|
||||||
if len(existingDb) != 0 && len(o.Type) != 0 && o.Type != existingDb {
|
if len(existingDb) != 0 && len(o.Type) != 0 && o.Type != existingDb {
|
||||||
return nil, fmt.Errorf("db.engine choice was %v but found pre-existing %v database in specified data directory", o.Type, existingDb)
|
return nil, fmt.Errorf("db.engine choice was %v but found pre-existing %v database in specified data directory", o.Type, existingDb)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user