diff --git a/cmd/tendermint/commands/key_migrate.go b/cmd/tendermint/commands/key_migrate.go index eaff1d99e..db06fa7d1 100644 --- a/cmd/tendermint/commands/key_migrate.go +++ b/cmd/tendermint/commands/key_migrate.go @@ -5,7 +5,9 @@ import ( "fmt" "github.com/spf13/cobra" + cfg "github.com/tendermint/tendermint/config" + "github.com/tendermint/tendermint/libs/log" "github.com/tendermint/tendermint/scripts/keymigrate" "github.com/tendermint/tendermint/scripts/scmigrate" ) @@ -15,54 +17,7 @@ func MakeKeyMigrateCommand() *cobra.Command { Use: "key-migrate", Short: "Run Database key migration", RunE: func(cmd *cobra.Command, args []string) error { - ctx, cancel := context.WithCancel(cmd.Context()) - defer cancel() - - contexts := []string{ - // this is ordered to put - // the more ephemeral tables first to - // forclose the possiblity of the - // ephemeral data overwriting later data - "tx_index", - "peerstore", - "light", - "blockstore", - "state", - "evidence", - } - - for idx, dbctx := range contexts { - logger.Info("beginning a key migration", - "dbctx", dbctx, - "num", idx+1, - "total", len(contexts), - ) - - db, err := cfg.DefaultDBProvider(&cfg.DBContext{ - ID: dbctx, - Config: config, - }) - - if err != nil { - return fmt.Errorf("constructing database handle: %w", err) - } - - if err = keymigrate.Migrate(ctx, db); err != nil { - return fmt.Errorf("running migration for context %q: %w", - dbctx, err) - } - - if dbctx == "blockstore" { - if err := scmigrate.Migrate(ctx, db); err != nil { - return fmt.Errorf("running seen commit migration: %w", err) - - } - } - } - - logger.Info("completed database migration successfully") - - return nil + return RunDatabaseMigration(cmd.Context(), logger, config) }, } @@ -71,3 +26,51 @@ func MakeKeyMigrateCommand() *cobra.Command { return cmd } + +func RunDatabaseMigration(ctx context.Context, logger log.Logger, conf *cfg.Config) error { + contexts := []string{ + // this is ordered to put + // the more ephemeral tables first to + // reduce the possibility of the + // ephemeral data overwriting later data + "tx_index", + "peerstore", + "light", + "blockstore", + "state", + "evidence", + } + + for idx, dbctx := range contexts { + logger.Info("beginning a key migration", + "dbctx", dbctx, + "num", idx+1, + "total", len(contexts), + ) + + db, err := cfg.DefaultDBProvider(&cfg.DBContext{ + ID: dbctx, + Config: conf, + }) + + if err != nil { + return fmt.Errorf("constructing database handle: %w", err) + } + + if err = keymigrate.Migrate(ctx, db); err != nil { + return fmt.Errorf("running migration for context %q: %w", + dbctx, err) + } + + if dbctx == "blockstore" { + if err := scmigrate.Migrate(ctx, db); err != nil { + return fmt.Errorf("running seen commit migration: %w", err) + + } + } + } + + logger.Info("completed database migration successfully") + + return nil +}