diff --git a/plugins/database/parameters.go b/plugins/database/parameters.go index c860dd8b3a2cda995b9682ce4f1143c6d84d21d6..d550522af396b7f74c34c59753670946f18806c4 100644 --- a/plugins/database/parameters.go +++ b/plugins/database/parameters.go @@ -9,9 +9,12 @@ const ( CfgDatabaseDir = "database.directory" // CfgDatabaseInMemory defines whether to use an in-memory database. CfgDatabaseInMemory = "database.inMemory" + // CfgDatabaseDirty defines whether to override the database dirty flag. + CfgDatabaseDirty = "database.dirty" ) func init() { flag.String(CfgDatabaseDir, "mainnetdb", "path to the database folder") flag.Bool(CfgDatabaseInMemory, false, "whether the database is only kept in memory and not persisted") + flag.String(CfgDatabaseDirty, "", "set the dirty flag of the database") } diff --git a/plugins/database/plugin.go b/plugins/database/plugin.go index a3f4d25cd7c4e97c4869f076b5c8861cc3aa5961..4e82ec6722136edd20e6d665f57cf915d2dd2538 100644 --- a/plugins/database/plugin.go +++ b/plugins/database/plugin.go @@ -3,6 +3,7 @@ package database import ( "errors" + "strconv" "sync" "time" @@ -77,6 +78,17 @@ func configure(_ *node.Plugin) { log.Fatalf("Failed to check database version: %s", err) } + if str := config.Node().GetString(CfgDatabaseDirty); str != "" { + val, err := strconv.ParseBool(str) + if err != nil { + log.Warnf("Invalid %s: %s", CfgDatabaseDirty, err) + } else if val { + MarkDatabaseUnhealthy() + } else { + MarkDatabaseHealthy() + } + } + if IsDatabaseUnhealthy() { log.Fatal("The database is marked as not properly shutdown/corrupted, please delete the database folder and restart.") }