diff --git a/CHANGELOG.md b/CHANGELOG.md index 674b6d538f..74f91ef957 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -56,6 +56,7 @@ - [#1064](https://github.com/crypto-org-chain/cronos/pull/1064) Simplify memiavl snapshot switching. - [#1067](https://github.com/crypto-org-chain/cronos/pull/1067) memiavl: only export state-sync snapshots on an exist snapshot - [#1082](https://github.com/crypto-org-chain/cronos/pull/1082) Make memiavl setup code reusable. +- [#1092](https://github.com/crypto-org-chain/cronos/pull/1092) memiavl disable sdk address cache if zero-copy enabled, and disable zero-copy by default. *April 13, 2023* diff --git a/go.mod b/go.mod index ac29769f5a..c8ea1849fd 100644 --- a/go.mod +++ b/go.mod @@ -6,13 +6,14 @@ require ( cosmossdk.io/errors v1.0.0-beta.7 cosmossdk.io/math v1.0.0-rc.0 github.com/armon/go-metrics v0.4.1 - github.com/cosmos/cosmos-sdk v0.46.14-0.20230628193009-a7631357d81a + github.com/cosmos/cosmos-sdk v0.46.14-0.20230705083228-b39cdb2e74ad github.com/cosmos/gogoproto v1.4.8 github.com/cosmos/ibc-go/v6 v6.2.0 github.com/crypto-org-chain/cronos/store v0.0.2 github.com/crypto-org-chain/cronos/versiondb v0.0.0-00010101000000-000000000000 github.com/ethereum/go-ethereum v1.10.26 github.com/evmos/ethermint v0.0.0-00010101000000-000000000000 + github.com/gogo/protobuf v1.3.3 github.com/golang/protobuf v1.5.3 github.com/gorilla/mux v1.8.0 github.com/grpc-ecosystem/grpc-gateway v1.16.0 @@ -103,7 +104,6 @@ require ( github.com/go-stack/stack v1.8.1 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/gateway v1.1.0 // indirect - github.com/gogo/protobuf v1.3.3 // indirect github.com/golang/glog v1.0.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/snappy v0.0.4 // indirect diff --git a/go.sum b/go.sum index d3d6756ca1..92cb2688c1 100644 --- a/go.sum +++ b/go.sum @@ -412,8 +412,8 @@ github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= github.com/cosmos/cosmos-proto v1.0.0-beta.1 h1:iDL5qh++NoXxG8hSy93FdYJut4XfgbShIocllGaXx/0= github.com/cosmos/cosmos-proto v1.0.0-beta.1/go.mod h1:8k2GNZghi5sDRFw/scPL8gMSowT1vDA+5ouxL8GjaUE= -github.com/cosmos/cosmos-sdk v0.46.14-0.20230628193009-a7631357d81a h1:gSmc5TdxMAIc01rtQdAUHCi0c8nyWVO++6ApnYLdkJg= -github.com/cosmos/cosmos-sdk v0.46.14-0.20230628193009-a7631357d81a/go.mod h1:ABDNny0muxj03rmJcyR0mG7O9QPGktl5e30EVsHvORM= +github.com/cosmos/cosmos-sdk v0.46.14-0.20230705083228-b39cdb2e74ad h1:8ZpO0zXy80YEFeby5ixmER6ffBYQJwyaZKVNk1ghHrM= +github.com/cosmos/cosmos-sdk v0.46.14-0.20230705083228-b39cdb2e74ad/go.mod h1:ABDNny0muxj03rmJcyR0mG7O9QPGktl5e30EVsHvORM= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= diff --git a/gomod2nix.toml b/gomod2nix.toml index c635f5f66d..f50a938976 100644 --- a/gomod2nix.toml +++ b/gomod2nix.toml @@ -137,8 +137,8 @@ schema = 3 version = "v1.0.0-beta.1" hash = "sha256-oATkuj+fM5eBn+ywO+w/tL0AFSIEkx0J3Yz+VhVe0QA=" [mod."github.com/cosmos/cosmos-sdk"] - version = "v0.46.14-0.20230628193009-a7631357d81a" - hash = "sha256-1Ti71UlePVHizaDkU2RVxhfxAaW7Kx3ie2LJCB9rM0U=" + version = "v0.46.14-0.20230705083228-b39cdb2e74ad" + hash = "sha256-6vVIkETNO/d5q8xMQALL97H08IKzsbQEME9iFAK+fGk=" [mod."github.com/cosmos/go-bip39"] version = "v1.0.0" hash = "sha256-Qm2aC2vaS8tjtMUbHmlBSagOSqbduEEDwc51qvQaBmA=" diff --git a/store/config/config.go b/store/config/config.go index 554ea46f2c..03f4c8ce49 100644 --- a/store/config/config.go +++ b/store/config/config.go @@ -9,6 +9,7 @@ type MemIAVLConfig struct { Enable bool `mapstructure:"enable"` // ZeroCopy defines if the memiavl should return slices pointing to mmap-ed buffers directly (zero-copy), // the zero-copied slices must not be retained beyond current block's execution. + // the sdk address cache will be disabled if zero-copy is enabled. ZeroCopy bool `mapstructure:"zero-copy"` // AsyncCommitBuffer defines the size of asynchronous commit queue, this greatly improve block catching-up // performance, -1 means synchronous commit. @@ -26,7 +27,6 @@ func DefaultMemIAVLConfig() MemIAVLConfig { return MemIAVLConfig{ CacheSize: DefaultCacheSize, SnapshotInterval: memiavl.DefaultSnapshotInterval, - ZeroCopy: true, SnapshotKeepRecent: 1, } } diff --git a/store/config/toml.go b/store/config/toml.go index 12738e1f1e..2848e226dc 100644 --- a/store/config/toml.go +++ b/store/config/toml.go @@ -13,6 +13,7 @@ enable = {{ .MemIAVL.Enable }} # ZeroCopy defines if the memiavl should return slices pointing to mmap-ed buffers directly (zero-copy), # the zero-copied slices must not be retained beyond current block's execution. +# the sdk address cache will be disabled if zero-copy is enabled. zero-copy = {{ .MemIAVL.ZeroCopy }} # AsyncCommitBuffer defines the size of asynchronous commit queue, this greatly improve block catching-up diff --git a/store/go.mod b/store/go.mod index 54be7343d6..f27ae47d90 100644 --- a/store/go.mod +++ b/store/go.mod @@ -5,11 +5,12 @@ go 1.20 require ( cosmossdk.io/errors v1.0.0-beta.7 github.com/confio/ics23/go v0.9.0 - github.com/cosmos/cosmos-sdk v0.46.13 + github.com/cosmos/cosmos-sdk v0.46.14-0.20230705083228-b39cdb2e74ad github.com/cosmos/iavl v0.19.6 github.com/crypto-org-chain/cronos/memiavl v0.0.3 github.com/gogo/protobuf v1.3.2 github.com/spf13/cast v1.5.0 + github.com/stretchr/testify v1.8.2 github.com/tendermint/tendermint v0.34.28 github.com/tendermint/tm-db v0.6.7 ) @@ -107,7 +108,6 @@ require ( github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.13.0 // indirect - github.com/stretchr/testify v1.8.2 // indirect github.com/subosito/gotenv v1.4.1 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect github.com/tendermint/go-amino v0.16.0 // indirect diff --git a/store/go.sum b/store/go.sum index 1d6eb5f6b2..7adf9c731d 100644 --- a/store/go.sum +++ b/store/go.sum @@ -140,8 +140,8 @@ github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= github.com/cosmos/cosmos-proto v1.0.0-alpha7 h1:yqYUOHF2jopwZh4dVQp3xgqwftE5/2hkrwIV6vkUbO0= github.com/cosmos/cosmos-proto v1.0.0-alpha7/go.mod h1:dosO4pSAbJF8zWCzCoTWP7nNsjcvSUBQmniFxDg5daw= -github.com/cosmos/cosmos-sdk v0.46.13 h1:LhL6WDBadczqBuCW0t5BHUzGQR3vbujdOYOfU0ORt+o= -github.com/cosmos/cosmos-sdk v0.46.13/go.mod h1:EfY521ATNEla8eJ6oJuZBdgP5+p360s7InnRqX+TWdM= +github.com/cosmos/cosmos-sdk v0.46.14-0.20230705083228-b39cdb2e74ad h1:8ZpO0zXy80YEFeby5ixmER6ffBYQJwyaZKVNk1ghHrM= +github.com/cosmos/cosmos-sdk v0.46.14-0.20230705083228-b39cdb2e74ad/go.mod h1:ABDNny0muxj03rmJcyR0mG7O9QPGktl5e30EVsHvORM= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= diff --git a/store/setup.go b/store/setup.go index 8e211ddb45..2470abef71 100644 --- a/store/setup.go +++ b/store/setup.go @@ -8,6 +8,7 @@ import ( "github.com/cosmos/cosmos-sdk/baseapp" servertypes "github.com/cosmos/cosmos-sdk/server/types" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/crypto-org-chain/cronos/memiavl" "github.com/crypto-org-chain/cronos/store/rootmulti" @@ -33,6 +34,12 @@ func SetupMemIAVL(logger log.Logger, homePath string, appOpts servertypes.AppOpt SnapshotInterval: cast.ToUint32(appOpts.Get(FlagSnapshotInterval)), CacheSize: cast.ToInt(appOpts.Get(FlagCacheSize)), } + + if opts.ZeroCopy { + // it's unsafe to cache zero-copied byte slices without copying them + sdk.SetAddrCacheEnabled(false) + } + // cms must be overridden before the other options, because they may use the cms, // make sure the cms aren't be overridden by the other options later on. baseAppOptions = append([]func(*baseapp.BaseApp){setMemIAVL(homePath, logger, opts, sdk46Compact)}, baseAppOptions...)