refactor: add sdk.LogDeferred to report errors in defers (#13619)

## Description

Closes: #11785

A new helper function called `LogDeferred` was added. This function it's used to report errors in `defer` section. It was added in `defer` statements of `x/bank` folder.

### Author Checklist

I have...

- [x] included the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title
- [x] added `!` to the type prefix if API or client breaking change
- [x] targeted the correct branch (see [PR Targeting](https://github.com/cosmos/cosmos-sdk/blob/main/CONTRIBUTING.md#pr-targeting))
- [x] provided a link to the relevant issue or specification
- [x] followed the guidelines for [building modules](https://github.com/cosmos/cosmos-sdk/blob/main/docs/building-modules)
- [x] included the necessary unit and integration [tests](https://github.com/cosmos/cosmos-sdk/blob/main/CONTRIBUTING.md#testing)
- [x] added a changelog entry to `CHANGELOG.md`
- [x] included comments for [documenting Go code](https://blog.golang.org/godoc)
- [x] updated the relevant documentation or specification
- [x] reviewed "Files changed" and left comments if necessary
- [x] confirmed all CI checks have passed

### Reviewers Checklist

*All items are required. Please add a note if the item is not applicable and please add
your handle next to the items reviewed if you only reviewed selected items.*

I have...

- [ ] confirmed the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title
- [ ] confirmed `!` in the type prefix if API or client breaking change
- [ ] confirmed all author checklist items have been addressed 
- [ ] reviewed state machine logic
- [ ] reviewed API design and naming
- [ ] reviewed documentation is accurate
- [ ] reviewed tests and test coverage
- [ ] manually tested (if applicable)
This commit is contained in:
leoflalv
2022-10-26 15:42:19 +00:00
committed by GitHub
parent e2b5cac403
commit 142880b046
8 changed files with 27 additions and 14 deletions
+1
View File
@@ -57,6 +57,7 @@ Ref: https://keepachangelog.com/en/1.0.0/
### Improvements
* [#13619](https://github.com/cosmos/cosmos-sdk/pull/13619) Add new function called LogDeferred to report errors in defers. Use the function in x/bank files.
* (tools) [#13603](https://github.com/cosmos/cosmos-sdk/pull/13603) Rename cosmovisor package name to `cosmossdk.io/tools/cosmovisor`. The new tool directory contains Cosmos SDK tools.
* (deps) [#13397](https://github.com/cosmos/cosmos-sdk/pull/13397) Bump Go version minimum requirement to `1.19`.
* [#13070](https://github.com/cosmos/cosmos-sdk/pull/13070) Migrate from `gogo/protobuf` to `cosmos/gogoproto`.
+3 -1
View File
@@ -1,6 +1,8 @@
package util
import "fmt"
import (
"fmt"
)
func CombineErrors(ret error, also error, desc string) error {
if also != nil {
+8
View File
@@ -7,6 +7,7 @@ import (
"time"
"github.com/cosmos/cosmos-sdk/types/kv"
log "github.com/tendermint/tendermint/libs/log"
)
// SortedJSON takes any JSON and returns it sorted by keys. Also, all white-spaces
@@ -133,3 +134,10 @@ func ParseLengthPrefixedBytes(key []byte, startIndex int, sliceLength int) ([]by
return byteSlice, endIndex
}
// LogDeferred logs an error in a deferred function call if the returned error is non-nil.
func LogDeferred(logger log.Logger, f func() error) {
if err := f(); err != nil {
logger.Error(err.Error())
}
}
+2 -2
View File
@@ -288,7 +288,7 @@ func (k BaseKeeper) IterateAllDenomMetaData(ctx sdk.Context, cb func(types.Metad
denomMetaDataStore := prefix.NewStore(store, types.DenomMetadataPrefix)
iterator := denomMetaDataStore.Iterator(nil, nil)
defer iterator.Close()
defer sdk.LogDeferred(ctx.Logger(), func() error { return iterator.Close() })
for ; iterator.Valid(); iterator.Next() {
var metadata types.Metadata
@@ -527,7 +527,7 @@ func (k BaseViewKeeper) IterateTotalSupply(ctx sdk.Context, cb func(sdk.Coin) bo
supplyStore := prefix.NewStore(store, types.SupplyKey)
iterator := supplyStore.Iterator(nil, nil)
defer iterator.Close()
defer sdk.LogDeferred(ctx.Logger(), func() error { return iterator.Close() })
for ; iterator.Valid(); iterator.Next() {
var amount math.Int
+1 -1
View File
@@ -445,7 +445,7 @@ func (k BaseSendKeeper) IterateSendEnabledEntries(ctx sdk.Context, cb func(denom
seStore := k.getSendEnabledPrefixStore(ctx)
iterator := seStore.Iterator(nil, nil)
defer iterator.Close()
defer sdk.LogDeferred(ctx.Logger(), func() error { return iterator.Close() })
for ; iterator.Valid(); iterator.Next() {
denom := string(iterator.Key())
+1 -1
View File
@@ -116,7 +116,7 @@ func (k BaseViewKeeper) IterateAccountBalances(ctx sdk.Context, addr sdk.AccAddr
accountStore := k.getAccountStore(ctx, addr)
iterator := accountStore.Iterator(nil, nil)
defer iterator.Close()
defer sdk.LogDeferred(ctx.Logger(), func() error { return iterator.Close() })
for ; iterator.Valid(); iterator.Next() {
denom := string(iterator.Key())
+4 -3
View File
@@ -9,6 +9,7 @@ import (
v042auth "github.com/cosmos/cosmos-sdk/x/auth/migrations/v042"
v1 "github.com/cosmos/cosmos-sdk/x/bank/migrations/v1"
"github.com/cosmos/cosmos-sdk/x/bank/types"
"github.com/tendermint/tendermint/libs/log"
)
// migrateSupply migrates the supply to be stored by denom key instead in a
@@ -50,7 +51,7 @@ func migrateSupply(store sdk.KVStore, cdc codec.BinaryCodec) error {
// migrateBalanceKeys migrate the balances keys to cater for variable-length
// addresses.
func migrateBalanceKeys(store sdk.KVStore) {
func migrateBalanceKeys(store sdk.KVStore, logger log.Logger) {
// old key is of format:
// prefix ("balances") || addrBytes (20 bytes) || denomBytes
// new key is of format
@@ -58,7 +59,7 @@ func migrateBalanceKeys(store sdk.KVStore) {
oldStore := prefix.NewStore(store, v1.BalancesPrefix)
oldStoreIter := oldStore.Iterator(nil, nil)
defer oldStoreIter.Close()
defer sdk.LogDeferred(logger, func() error { return oldStoreIter.Close() })
for ; oldStoreIter.Valid(); oldStoreIter.Next() {
addr := v1.AddressFromBalancesStore(oldStoreIter.Key())
@@ -80,7 +81,7 @@ func migrateBalanceKeys(store sdk.KVStore) {
// - Prune balances & supply with zero coins (ref: https://github.com/cosmos/cosmos-sdk/pull/9229)
func MigrateStore(ctx sdk.Context, storeKey storetypes.StoreKey, cdc codec.BinaryCodec) error {
store := ctx.KVStore(storeKey)
migrateBalanceKeys(store)
migrateBalanceKeys(store, ctx.Logger())
if err := pruneZeroBalances(store, cdc); err != nil {
return err
+7 -6
View File
@@ -8,6 +8,7 @@ import (
"github.com/cosmos/cosmos-sdk/types/address"
v2 "github.com/cosmos/cosmos-sdk/x/bank/migrations/v2"
"github.com/cosmos/cosmos-sdk/x/bank/types"
"github.com/tendermint/tendermint/libs/log"
)
// MigrateStore performs in-place store migrations from v0.43 to v0.45. The
@@ -18,19 +19,19 @@ import (
// - Remove duplicate denom from denom metadata store key.
func MigrateStore(ctx sdk.Context, storeKey storetypes.StoreKey, cdc codec.BinaryCodec) error {
store := ctx.KVStore(storeKey)
err := addDenomReverseIndex(store, cdc)
err := addDenomReverseIndex(store, cdc, ctx.Logger())
if err != nil {
return err
}
return migrateDenomMetadata(store)
return migrateDenomMetadata(store, ctx.Logger())
}
func addDenomReverseIndex(store sdk.KVStore, cdc codec.BinaryCodec) error {
func addDenomReverseIndex(store sdk.KVStore, cdc codec.BinaryCodec, logger log.Logger) error {
oldBalancesStore := prefix.NewStore(store, v2.BalancesPrefix)
oldBalancesIter := oldBalancesStore.Iterator(nil, nil)
defer oldBalancesIter.Close()
defer sdk.LogDeferred(logger, func() error { return oldBalancesIter.Close() })
denomPrefixStores := make(map[string]prefix.Store) // memoize prefix stores
@@ -72,11 +73,11 @@ func addDenomReverseIndex(store sdk.KVStore, cdc codec.BinaryCodec) error {
return nil
}
func migrateDenomMetadata(store sdk.KVStore) error {
func migrateDenomMetadata(store sdk.KVStore, logger log.Logger) error {
oldDenomMetaDataStore := prefix.NewStore(store, v2.DenomMetadataPrefix)
oldDenomMetaDataIter := oldDenomMetaDataStore.Iterator(nil, nil)
defer oldDenomMetaDataIter.Close()
defer sdk.LogDeferred(logger, func() error { return oldDenomMetaDataIter.Close() })
for ; oldDenomMetaDataIter.Valid(); oldDenomMetaDataIter.Next() {
oldKey := oldDenomMetaDataIter.Key()