diff --git a/tools/db-recovery/main.go b/tools/db-recovery/main.go new file mode 100644 index 0000000000000000000000000000000000000000..aa56afc177bcb1164cadb62eb14e1d0591d290fa --- /dev/null +++ b/tools/db-recovery/main.go @@ -0,0 +1,63 @@ +package main + +import ( + "fmt" + "os" + + "github.com/iotaledger/goshimmer/packages/database" + "github.com/iotaledger/goshimmer/packages/database/prefix" + flag "github.com/spf13/pflag" + "github.com/spf13/viper" +) + +const ( + cfgDatabaseDir = "database" +) + +func init() { + flag.String(cfgDatabaseDir, "mainnetdb", "path to the database folder") +} + +func main() { + + if err := run(); err != nil { + fmt.Fprintf(os.Stderr, "Error: %s\n", err) + os.Exit(1) + } +} + +func run() error { + flag.Parse() + err := viper.BindPFlags(flag.CommandLine) + if err != nil { + return err + } + + dbDir := viper.GetString(cfgDatabaseDir) + ok, err := exists(dbDir) + if err != nil { + return err + } + if !ok { + return fmt.Errorf("database folder does not exist: %s", dbDir) + } + + db, err := database.NewDB(dbDir) + if err != nil { + return err + } + + healthStore := db.NewStore().WithRealm([]byte{prefix.DBPrefixHealth}) + return healthStore.Delete([]byte("db_health")) +} + +func exists(path string) (bool, error) { + _, err := os.Stat(path) + if os.IsNotExist(err) { + return false, nil + } + if err != nil { + return false, err + } + return true, err +}