From 00fead91c4f58bc7f56f81512280d3120860989c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Wed, 23 Aug 2023 16:42:37 +0300 Subject: [PATCH] cmd/utils: fix a startup issue on deleted chaindata but dangling ancients (#27989) --- cmd/utils/flags.go | 6 +++--- core/rawdb/database.go | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index e2136feb8..0e90fd451 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -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, // or fallback to write mode if the database is not initialized. func tryMakeReadOnlyDatabase(ctx *cli.Context, stack *node.Node) ethdb.Database { - // If datadir doesn't exist we need to open db in write-mode - // so database engine can create files. + // If the database doesn't exist we need to open it in write-mode to allow + // the engine to create files. readonly := true - if !common.FileExist(stack.ResolvePath("chaindata")) { + if rawdb.PreexistingDatabase(stack.ResolvePath("chaindata")) == "" { readonly = false } return MakeChainDatabase(ctx, stack, readonly) diff --git a/core/rawdb/database.go b/core/rawdb/database.go index 981690f7b..31edd0dcb 100644 --- a/core/rawdb/database.go +++ b/core/rawdb/database.go @@ -326,10 +326,10 @@ const ( 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 // empty string). -func hasPreexistingDb(path string) string { +func PreexistingDatabase(path string) string { if _, err := os.Stat(filepath.Join(path, "CURRENT")); err != nil { 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 // 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 { return nil, fmt.Errorf("db.engine choice was %v but found pre-existing %v database in specified data directory", o.Type, existingDb) }