fix: prune cmd should disable async pruning (#22656)

This commit is contained in:
yihuang 2024-12-04 20:31:27 +08:00 committed by GitHub
parent 7fa2356c07
commit eb3bf8b046
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 33 additions and 10 deletions

View File

@ -56,6 +56,7 @@ Every module contains its own CHANGELOG.md. Please refer to the module you are i
* (sims) [#21906](https://github.com/cosmos/cosmos-sdk/pull/21906) Skip sims test when running dry on validators
* (cli) [#21919](https://github.com/cosmos/cosmos-sdk/pull/21919) Query address-by-acc-num by account_id instead of id.
* (cli) [#22656](https://github.com/cosmos/cosmos-sdk/pull/22656) Prune cmd should disable async pruning.
### API Breaking Changes

View File

@ -86,6 +86,11 @@ func SetIAVLDisableFastNode(disable bool) func(*BaseApp) {
return func(bapp *BaseApp) { bapp.cms.SetIAVLDisableFastNode(disable) }
}
// SetIAVLSyncPruning set sync/async pruning in the IAVL store.
func SetIAVLSyncPruning(syncPruning bool) func(*BaseApp) {
return func(bapp *BaseApp) { bapp.cms.SetIAVLSyncPruning(syncPruning) }
}
// SetInterBlockCache provides a BaseApp option function that sets the
// inter-block cache.
func SetInterBlockCache(cache storetypes.MultiStorePersistentCache) func(*BaseApp) {

View File

@ -50,6 +50,9 @@ Supported app-db-backend types include 'goleveldb', 'rocksdb', 'pebbledb'.`,
return err
}
// must disable async pruning
vp.Set(server.FlagIAVLSyncPruning, true)
// use the first argument if present to set the pruning method
if len(args) > 0 {
vp.Set(server.FlagPruning, args[0])
@ -72,6 +75,9 @@ Supported app-db-backend types include 'goleveldb', 'rocksdb', 'pebbledb'.`,
return err
}
// in our test, it's important to close db explicitly for pebbledb to write to disk.
defer db.Close()
logger := log.NewLogger(cmd.OutOrStdout())
app := appCreator(logger, db, nil, vp)
cms := app.CommitMultiStore()

View File

@ -142,6 +142,10 @@ func (ms multiStore) SetIAVLDisableFastNode(disable bool) {
panic("not implemented")
}
func (ms multiStore) SetIAVLSyncPruning(syncPruning bool) {
panic("not implemented")
}
func (ms multiStore) SetInitialVersion(version int64) error {
panic("not implemented")
}

View File

@ -79,6 +79,7 @@ const (
FlagMinRetainBlocks = "min-retain-blocks"
FlagIAVLCacheSize = "iavl-cache-size"
FlagDisableIAVLFastNode = "iavl-disable-fastnode"
FlagIAVLSyncPruning = "iavl-sync-pruning"
FlagShutdownGrace = "shutdown-grace"
// state sync-related flags

View File

@ -555,6 +555,7 @@ func DefaultBaseappOptions(appOpts types.AppOptions) []func(*baseapp.BaseApp) {
baseapp.SetSnapshot(snapshotStore, snapshotOptions),
baseapp.SetIAVLCacheSize(cast.ToInt(appOpts.Get(FlagIAVLCacheSize))),
baseapp.SetIAVLDisableFastNode(cast.ToBool(appOpts.Get(FlagDisableIAVLFastNode))),
baseapp.SetIAVLSyncPruning(cast.ToBool(appOpts.Get(FlagIAVLSyncPruning))),
defaultMempool,
baseapp.SetChainID(chainID),
baseapp.SetQueryGasLimit(cast.ToUint64(appOpts.Get(FlagQueryGasLimit))),

View File

@ -51,11 +51,16 @@ func LoadStore(db corestore.KVStoreWithBatch, logger types.Logger, key types.Sto
// provided DB. An error is returned if the version fails to load, or if called with a positive
// version on an empty tree.
func LoadStoreWithInitialVersion(db corestore.KVStoreWithBatch, logger types.Logger, key types.StoreKey, id types.CommitID, initialVersion uint64, cacheSize int, disableFastNode bool, metrics metrics.StoreMetrics) (types.CommitKVStore, error) {
return LoadStoreWithOpts(db, logger, key, id, initialVersion, cacheSize, disableFastNode, metrics, iavl.AsyncPruningOption(true))
}
func LoadStoreWithOpts(db corestore.KVStoreWithBatch, logger types.Logger, key types.StoreKey, id types.CommitID, initialVersion uint64, cacheSize int, disableFastNode bool, metrics metrics.StoreMetrics, opts ...iavl.Option) (types.CommitKVStore, error) {
// store/v1 and app/v1 flows never require an initial version of 0
if initialVersion == 0 {
initialVersion = 1
}
tree := iavl.NewMutableTree(db, cacheSize, disableFastNode, logger, iavl.InitialVersionOption(initialVersion), iavl.AsyncPruningOption(true))
opts = append(opts, iavl.InitialVersionOption(initialVersion))
tree := iavl.NewMutableTree(db, cacheSize, disableFastNode, logger, opts...)
isUpgradeable, err := tree.IsUpgradeable()
if err != nil {

View File

@ -63,6 +63,7 @@ type Store struct {
pruningManager *pruning.Manager
iavlCacheSize int
iavlDisableFastNode bool
iavlSyncPruning bool
storesParams map[types.StoreKey]storeParams
stores map[types.StoreKey]types.CommitKVStore
keysByName map[string]types.StoreKey
@ -133,6 +134,10 @@ func (rs *Store) SetIAVLDisableFastNode(disableFastNode bool) {
rs.iavlDisableFastNode = disableFastNode
}
func (rs *Store) SetIAVLSyncPruning(syncPruning bool) {
rs.iavlSyncPruning = syncPruning
}
// GetStoreType implements Store.
func (rs *Store) GetStoreType() types.StoreType {
return types.StoreTypeMulti
@ -1033,15 +1038,7 @@ func (rs *Store) loadCommitStoreFromParams(key types.StoreKey, id types.CommitID
panic("recursive MultiStores not yet supported")
case types.StoreTypeIAVL:
var store types.CommitKVStore
var err error
if params.initialVersion == 0 {
store, err = iavl.LoadStore(db, rs.logger, key, id, rs.iavlCacheSize, rs.iavlDisableFastNode, rs.metrics)
} else {
store, err = iavl.LoadStoreWithInitialVersion(db, rs.logger, key, id, params.initialVersion, rs.iavlCacheSize, rs.iavlDisableFastNode, rs.metrics)
}
store, err := iavl.LoadStoreWithOpts(db, rs.logger, key, id, params.initialVersion, rs.iavlCacheSize, rs.iavlDisableFastNode, rs.metrics, iavltree.AsyncPruningOption(!rs.iavlSyncPruning))
if err != nil {
return nil, err
}

View File

@ -221,6 +221,9 @@ type CommitMultiStore interface {
// SetIAVLDisableFastNode enables/disables fastnode feature on iavl.
SetIAVLDisableFastNode(disable bool)
// SetIAVLSyncPruning set sync/async pruning on iavl.
SetIAVLSyncPruning(sync bool)
// RollbackToVersion rollback the db to specific version(height).
RollbackToVersion(version int64) error