diff --git a/CHANGELOG.md b/CHANGELOG.md index 74d8a9a804..7b41f921fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -176,7 +176,8 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Bug Fixes -* [\#10844](https://github.com/cosmos/cosmos-sdk/pull/10844) Automatic recovering non-consistent keyring storage during public key import +* (store) [\#11177](https://github.com/cosmos/cosmos-sdk/pull/11177) Update the prune `nothing` strategy to store the last two heights. +* [\#10844](https://github.com/cosmos/cosmos-sdk/pull/10844) Automatic recovering non-consistent keyring storage during public key import. * (store) [\#11117](https://github.com/cosmos/cosmos-sdk/pull/11117) Fix data race in store trace component * (cli) [\#11065](https://github.com/cosmos/cosmos-sdk/pull/11065) Ensure the `tendermint-validator-set` query command respects the `-o` output flag. * (grpc) [\#10985](https://github.com/cosmos/cosmos-sdk/pull/10992) The `/cosmos/tx/v1beta1/txs/{hash}` endpoint returns a 404 when a tx does not exist. diff --git a/server/config/config.go b/server/config/config.go index 2c16c57baf..64262c37ac 100644 --- a/server/config/config.go +++ b/server/config/config.go @@ -318,6 +318,11 @@ func (c Config) ValidateBasic() error { if c.BaseConfig.MinGasPrices == "" { return sdkerrors.ErrAppConfig.Wrap("set min gas price in app.toml or flag or env variable") } + if c.Pruning == storetypes.PruningOptionEverything && c.StateSync.SnapshotInterval > 0 { + return sdkerrors.ErrAppConfig.Wrapf( + "cannot enable state sync snapshots with '%s' pruning setting", storetypes.PruningOptionEverything, + ) + } return nil } diff --git a/server/config/toml.go b/server/config/toml.go index 1da82593ce..f0f4ce5c88 100644 --- a/server/config/toml.go +++ b/server/config/toml.go @@ -24,7 +24,7 @@ minimum-gas-prices = "{{ .BaseConfig.MinGasPrices }}" # default: the last 362880 states are kept, pruning at 10 block intervals # nothing: all historic states will be saved, nothing will be deleted (i.e. archiving node) -# everything: all saved states will be deleted, storing only the current state; pruning at 10 block intervals +# everything: all saved states will be deleted, storing only the current and previous state; pruning at 10 block intervals # custom: allow pruning options to be manually specified through 'pruning-keep-recent' and 'pruning-interval' pruning = "{{ .BaseConfig.Pruning }}" diff --git a/server/start.go b/server/start.go index 45d7c920ea..e63ae27326 100644 --- a/server/start.go +++ b/server/start.go @@ -83,7 +83,7 @@ For '--pruning' the options are as follows: default: the last 362880 states are kept, pruning at 10 block intervals nothing: all historic states will be saved, nothing will be deleted (i.e. archiving node) -everything: all saved states will be deleted, storing only the current state; pruning at 10 block intervals +everything: all saved states will be deleted, storing only the current and previous state; pruning at 10 block intervals custom: allow pruning options to be manually specified through 'pruning-keep-recent' and 'pruning-interval' Node halting configurations exist in the form of two flags: '--halt-height' and '--halt-time'. During diff --git a/store/rootmulti/store.go b/store/rootmulti/store.go index bd73c2fb77..5a64903cd5 100644 --- a/store/rootmulti/store.go +++ b/store/rootmulti/store.go @@ -410,6 +410,7 @@ func (rs *Store) Commit() types.CommitID { previousHeight = rs.lastCommitInfo.GetVersion() version = previousHeight + 1 } + rs.lastCommitInfo = commitStores(version, rs.stores, rs.removalMap) // remove remnants of removed stores @@ -426,7 +427,7 @@ func (rs *Store) Commit() types.CommitID { // Determine if pruneHeight height needs to be added to the list of heights to // be pruned, where pruneHeight = (commitHeight - 1) - KeepRecent. - if int64(rs.pruningOpts.KeepRecent) < previousHeight { + if rs.pruningOpts.Interval > 0 && int64(rs.pruningOpts.KeepRecent) < previousHeight { pruneHeight := previousHeight - int64(rs.pruningOpts.KeepRecent) rs.pruneHeights = append(rs.pruneHeights, pruneHeight) } diff --git a/store/types/pruning.go b/store/types/pruning.go index 774f806fe1..3dd05b02bd 100644 --- a/store/types/pruning.go +++ b/store/types/pruning.go @@ -21,9 +21,9 @@ var ( PruneDefault = NewPruningOptions(362880, 10) // PruneEverything defines a pruning strategy where all committed heights are - // deleted, storing only the current height and where to-be pruned heights are - // pruned at every 10th height. - PruneEverything = NewPruningOptions(0, 10) + // deleted, storing only the current and previous height and where to-be pruned + // heights are pruned at every 10th height. + PruneEverything = NewPruningOptions(2, 10) // PruneNothing defines a pruning strategy where all heights are kept on disk. PruneNothing = NewPruningOptions(0, 0) diff --git a/store/v2/multi/store_test.go b/store/v2/multi/store_test.go index fdf9202f0f..cc45eb9daf 100644 --- a/store/v2/multi/store_test.go +++ b/store/v2/multi/store_test.go @@ -400,7 +400,7 @@ func TestPruning(t *testing.T) { }{ {types.PruningOptions{2, 10}, []uint64{8, 9, 10}}, {types.PruningOptions{0, 10}, []uint64{10}}, - {types.PruneEverything, []uint64{10}}, + {types.PruneEverything, []uint64{8, 9, 10}}, {types.PruneNothing, []uint64{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}}, }