From 75bcf47f13b9e7d046ae5969e03dae1dc8f22067 Mon Sep 17 00:00:00 2001 From: Aleksandr Bezobchuk Date: Wed, 23 Feb 2022 15:32:47 -0500 Subject: [PATCH] refactor: prune everything (#11177) --- CHANGELOG.md | 3 ++- server/config/config.go | 5 +++++ server/config/toml.go | 2 +- server/start.go | 2 +- store/rootmulti/store.go | 3 ++- store/types/pruning.go | 6 +++--- store/v2/multi/store_test.go | 2 +- 7 files changed, 15 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 74d8a9a80..7b41f921f 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 2c16c57ba..64262c37a 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 1da82593c..f0f4ce5c8 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 45d7c920e..e63ae2732 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 bd73c2fb7..5a64903cd 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 774f806fe..3dd05b02b 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 fdf9202f0..cc45eb9da 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}}, }