diff --git a/CHANGELOG_PENDING.md b/CHANGELOG_PENDING.md index 1b847da51..1dcee4468 100644 --- a/CHANGELOG_PENDING.md +++ b/CHANGELOG_PENDING.md @@ -12,7 +12,7 @@ Special thanks to external contributors on this release: - CLI/RPC/Config - - [cli] \#8081 make the reset command safe to use (@marbar3778). + - [cli] \#8081 make the reset command safe to use (@marbar3778) by intoducing `reset-state` command. Fixed by \#8259. - Apps diff --git a/cmd/tendermint/commands/reset_priv_validator.go b/cmd/tendermint/commands/reset.go similarity index 96% rename from cmd/tendermint/commands/reset_priv_validator.go rename to cmd/tendermint/commands/reset.go index e9e2e1fd4..1f6c42d57 100644 --- a/cmd/tendermint/commands/reset_priv_validator.go +++ b/cmd/tendermint/commands/reset.go @@ -70,6 +70,11 @@ func resetAll(dbDir, addrBookFile, privValKeyFile, privValStateFile string, logg logger.Error("Error removing all blockchain history", "dir", dbDir, "err", err) } + if err := tmos.EnsureDir(dbDir, 0700); err != nil { + logger.Error("unable to recreate dbDir", "err", err) + } + + // recreate the dbDir since the privVal state needs to live there return resetFilePV(privValKeyFile, privValStateFile, logger, keyType) } @@ -129,6 +134,7 @@ func resetState(dbDir string, logger log.Logger, keyType string) error { logger.Error("error removing peerstore.db", "dir", peerstore, "err", err) } } + if err := tmos.EnsureDir(dbDir, 0700); err != nil { logger.Error("unable to recreate dbDir", "err", err) } diff --git a/cmd/tendermint/commands/reset_test.go b/cmd/tendermint/commands/reset_test.go new file mode 100644 index 000000000..10611c9e4 --- /dev/null +++ b/cmd/tendermint/commands/reset_test.go @@ -0,0 +1,57 @@ +package commands + +import ( + "path/filepath" + "testing" + + "github.com/stretchr/testify/require" + + cfg "github.com/tendermint/tendermint/config" + "github.com/tendermint/tendermint/privval" +) + +func Test_ResetAll(t *testing.T) { + config := cfg.TestConfig() + dir := t.TempDir() + config.SetRoot(dir) + cfg.EnsureRoot(dir) + require.NoError(t, initFilesWithConfig(config)) + pv, err := privval.LoadFilePV(config.PrivValidator.KeyFile(), config.PrivValidator.StateFile()) + require.NoError(t, err) + pv.LastSignState.Height = 10 + pv.Save() + require.NoError(t, resetAll(config.DBDir(), config.P2P.AddrBookFile(), config.PrivValidator.KeyFile(), + config.PrivValidator.StateFile(), logger)) + require.DirExists(t, config.DBDir()) + require.NoFileExists(t, filepath.Join(config.DBDir(), "block.db")) + require.NoFileExists(t, filepath.Join(config.DBDir(), "state.db")) + require.NoFileExists(t, filepath.Join(config.DBDir(), "evidence.db")) + require.NoFileExists(t, filepath.Join(config.DBDir(), "tx_index.db")) + require.FileExists(t, config.PrivValidator.StateFile()) + pv, err = privval.LoadFilePV(config.PrivValidator.KeyFile(), config.PrivValidator.StateFile()) + require.NoError(t, err) + require.Equal(t, int64(0), pv.LastSignState.Height) +} + +func Test_ResetState(t *testing.T) { + config := cfg.TestConfig() + dir := t.TempDir() + config.SetRoot(dir) + cfg.EnsureRoot(dir) + require.NoError(t, initFilesWithConfig(config)) + pv, err := privval.LoadFilePV(config.PrivValidator.KeyFile(), config.PrivValidator.StateFile()) + require.NoError(t, err) + pv.LastSignState.Height = 10 + pv.Save() + require.NoError(t, resetState(config.DBDir(), logger, keyType)) + require.DirExists(t, config.DBDir()) + require.NoFileExists(t, filepath.Join(config.DBDir(), "block.db")) + require.NoFileExists(t, filepath.Join(config.DBDir(), "state.db")) + require.NoFileExists(t, filepath.Join(config.DBDir(), "evidence.db")) + require.NoFileExists(t, filepath.Join(config.DBDir(), "tx_index.db")) + require.FileExists(t, config.PrivValidator.StateFile()) + pv, err = privval.LoadFilePV(config.PrivValidator.KeyFile(), config.PrivValidator.StateFile()) + require.NoError(t, err) + // private validator state should still be intact. + require.Equal(t, int64(10), pv.LastSignState.Height) +} diff --git a/internal/p2p/pex/reactor_test.go b/internal/p2p/pex/reactor_test.go index d00260587..d647253b3 100644 --- a/internal/p2p/pex/reactor_test.go +++ b/internal/p2p/pex/reactor_test.go @@ -1,6 +1,6 @@ // Temporarily disabled pending ttps://github.com/tendermint/tendermint/issues/7626. //go:build issue7626 -//+build issue7626 +// +build issue7626 package pex_test