From 8dbdee7f1082a84c942166ce51aab7059c7f63b4 Mon Sep 17 00:00:00 2001 From: yihuang Date: Tue, 27 Jun 2023 08:38:26 +0800 Subject: [PATCH] Problem: memiavl setup code is not clean (#994) * Problem: memiavl setup code is not optimal * use v0.0.3 --- app/app.go | 3 ++- app/config/config.go | 31 ----------------------- app/config/toml.go | 30 ---------------------- app/memiavl.go | 52 -------------------------------------- cmd/chain-maind/app/app.go | 9 ++++--- default.nix | 4 ++- go.mod | 4 +-- go.sum | 8 +++--- gomod2nix.toml | 8 +++--- 9 files changed, 20 insertions(+), 129 deletions(-) delete mode 100644 app/config/config.go delete mode 100644 app/config/toml.go delete mode 100644 app/memiavl.go diff --git a/app/app.go b/app/app.go index 217d2d0c3..ea34fda02 100644 --- a/app/app.go +++ b/app/app.go @@ -142,6 +142,7 @@ import ( // unnamed import of statik for swagger UI support _ "github.com/crypto-org-chain/chain-main/v4/app/docs/statik" + memiavlstore "github.com/crypto-org-chain/cronos/store" memiavlrootmulti "github.com/crypto-org-chain/cronos/store/rootmulti" ) @@ -300,7 +301,7 @@ func New( legacyAmino := encodingConfig.Amino interfaceRegistry := encodingConfig.InterfaceRegistry - baseAppOptions = SetupMemIAVL(logger, homePath, appOpts, baseAppOptions) + baseAppOptions = memiavlstore.SetupMemIAVL(logger, homePath, appOpts, baseAppOptions) bApp := baseapp.NewBaseApp(appName, logger, db, encodingConfig.TxConfig.TxDecoder(), baseAppOptions...) bApp.SetCommitMultiStoreTracer(traceStore) bApp.SetVersion(version.Version) diff --git a/app/config/config.go b/app/config/config.go deleted file mode 100644 index d1aa4d2a7..000000000 --- a/app/config/config.go +++ /dev/null @@ -1,31 +0,0 @@ -package config - -import "github.com/crypto-org-chain/cronos/memiavl" - -const DefaultCacheSize = 1000 - -type MemIAVLConfig struct { - // Enable defines if the memiavl should be enabled. - 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. - ZeroCopy bool `mapstructure:"zero-copy"` - // AsyncCommitBuffer defines the size of asynchronous commit queue, this greatly improve block catching-up - // performance, -1 means synchronous commit. - AsyncCommitBuffer int `mapstructure:"async-commit-buffer"` - // SnapshotKeepRecent defines what many old snapshots (excluding the latest one) to keep after new snapshots are taken. - SnapshotKeepRecent uint32 `mapstructure:"snapshot-keep-recent"` - // SnapshotInterval defines the block interval the memiavl snapshot is taken, default to 1000. - SnapshotInterval uint32 `mapstructure:"snapshot-interval"` - // CacheSize defines the size of the cache for each memiavl store. - CacheSize int `mapstructure:"cache-size"` -} - -func DefaultMemIAVLConfig() MemIAVLConfig { - return MemIAVLConfig{ - CacheSize: DefaultCacheSize, - SnapshotInterval: memiavl.DefaultSnapshotInterval, - ZeroCopy: true, - SnapshotKeepRecent: 1, - } -} diff --git a/app/config/toml.go b/app/config/toml.go deleted file mode 100644 index 4ee9ce0b2..000000000 --- a/app/config/toml.go +++ /dev/null @@ -1,30 +0,0 @@ -package config - -// DefaultConfigTemplate defines the configuration template for the memiavl configuration -const DefaultConfigTemplate = ` -############################################################################### -### MemIAVL Configuration ### -############################################################################### - -[memiavl] - -# Enable defines if the memiavl should be enabled. -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. -zero-copy = {{ .MemIAVL.ZeroCopy }} - -# AsyncCommitBuffer defines the size of asynchronous commit queue, this greatly improve block catching-up -# performance, -1 means synchronous commit. -async-commit-buffer = {{ .MemIAVL.AsyncCommitBuffer }} - -# SnapshotKeepRecent defines what many old snapshots (excluding the latest one) to keep after new snapshots are taken. -snapshot-keep-recent = {{ .MemIAVL.SnapshotKeepRecent }} - -# SnapshotInterval defines the block interval the memiavl snapshot is taken, default to 1000. -snapshot-interval = {{ .MemIAVL.SnapshotInterval }} - -# CacheSize defines the size of the cache for each memiavl store, default to 1000. -cache-size = {{ .MemIAVL.CacheSize }} -` diff --git a/app/memiavl.go b/app/memiavl.go deleted file mode 100644 index e515396cb..000000000 --- a/app/memiavl.go +++ /dev/null @@ -1,52 +0,0 @@ -package app - -import ( - "path/filepath" - - "github.com/spf13/cast" - "github.com/tendermint/tendermint/libs/log" - - "github.com/cosmos/cosmos-sdk/baseapp" - servertypes "github.com/cosmos/cosmos-sdk/server/types" - - "github.com/crypto-org-chain/cronos/memiavl" - "github.com/crypto-org-chain/cronos/store/rootmulti" -) - -const ( - FlagMemIAVL = "memiavl.enable" - FlagAsyncCommitBuffer = "memiavl.async-commit-buffer" - FlagZeroCopy = "memiavl.zero-copy" - FlagSnapshotKeepRecent = "memiavl.snapshot-keep-recent" - FlagSnapshotInterval = "memiavl.snapshot-interval" - FlagCacheSize = "memiavl.cache-size" -) - -func SetupMemIAVL(logger log.Logger, homePath string, appOpts servertypes.AppOptions, baseAppOptions []func(*baseapp.BaseApp)) []func(*baseapp.BaseApp) { - if cast.ToBool(appOpts.Get(FlagMemIAVL)) { - opts := memiavl.Options{ - AsyncCommitBuffer: cast.ToInt(appOpts.Get(FlagAsyncCommitBuffer)), - ZeroCopy: cast.ToBool(appOpts.Get(FlagZeroCopy)), - SnapshotKeepRecent: cast.ToUint32(appOpts.Get(FlagSnapshotKeepRecent)), - SnapshotInterval: cast.ToUint32(appOpts.Get(FlagSnapshotInterval)), - CacheSize: cast.ToInt(appOpts.Get(FlagCacheSize)), - } - // 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)}, baseAppOptions...) - } - - return baseAppOptions -} - -func setMemIAVL(homePath string, logger log.Logger, opts memiavl.Options) func(*baseapp.BaseApp) { - return func(bapp *baseapp.BaseApp) { - // trigger state-sync snapshot creation by memiavl - opts.TriggerStateSyncExport = func(height int64) { - go bapp.SnapshotManager().SnapshotIfApplicable(height) - } - cms := rootmulti.NewStore(filepath.Join(homePath, "data", "memiavl.db"), logger) - cms.SetMemIAVLOptions(opts) - bapp.SetCMS(cms) - } -} diff --git a/cmd/chain-maind/app/app.go b/cmd/chain-maind/app/app.go index dd791a10b..e00587302 100644 --- a/cmd/chain-maind/app/app.go +++ b/cmd/chain-maind/app/app.go @@ -37,10 +37,11 @@ import ( govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" "github.com/crypto-org-chain/chain-main/v4/app" - appcfg "github.com/crypto-org-chain/chain-main/v4/app/config" "github.com/crypto-org-chain/chain-main/v4/app/params" "github.com/crypto-org-chain/chain-main/v4/config" chainmaincli "github.com/crypto-org-chain/chain-main/v4/x/chainmain/client/cli" + + memiavlcfg "github.com/crypto-org-chain/cronos/store/config" ) const EnvPrefix = "CRO" @@ -101,7 +102,7 @@ func initAppConfig() (string, interface{}) { type CustomAppConfig struct { serverconfig.Config - MemIAVL appcfg.MemIAVLConfig `mapstructure:"memiavl"` + MemIAVL memiavlcfg.MemIAVLConfig `mapstructure:"memiavl"` } // Optionally allow the chain developer to overwrite the SDK's default @@ -112,10 +113,10 @@ func initAppConfig() (string, interface{}) { customAppConfig := CustomAppConfig{ Config: *srvCfg, - MemIAVL: appcfg.DefaultMemIAVLConfig(), + MemIAVL: memiavlcfg.DefaultMemIAVLConfig(), } - return serverconfig.DefaultConfigTemplate + appcfg.DefaultConfigTemplate, customAppConfig + return serverconfig.DefaultConfigTemplate + memiavlcfg.DefaultConfigTemplate, customAppConfig } func initRootCmd(rootCmd *cobra.Command, encodingConfig params.EncodingConfig) { diff --git a/default.nix b/default.nix index 5e205d879..6e7715118 100644 --- a/default.nix +++ b/default.nix @@ -11,6 +11,7 @@ , rev ? "dirty" , ledger_zemu ? false , static ? stdenv.hostPlatform.isStatic +, nativeByteOrder ? true # nativeByteOrder mode will panic on big endian machines }: let inherit (lib) concatStringsSep; @@ -59,7 +60,8 @@ buildGoApplication rec { "!ledger_mock" (if ledger_zemu then "ledger_zemu" else "!ledger_zemu") network - ] ++ lib.lists.optionals (rocksdb != null) [ "rocksdb" "grocksdb_no_link" ]; + ] ++ lib.optionals (rocksdb != null) [ "rocksdb" "grocksdb_no_link" ] + ++ lib.optionals nativeByteOrder [ "nativebyteorder" ]; ldflags = '' -X github.com/cosmos/cosmos-sdk/version.Name=crypto-org-chain -X github.com/cosmos/cosmos-sdk/version.AppName=${pname} diff --git a/go.mod b/go.mod index 31bd14e8c..c3a88024d 100644 --- a/go.mod +++ b/go.mod @@ -9,8 +9,7 @@ require ( github.com/cosmos/cosmos-proto v1.0.0-alpha8 github.com/cosmos/cosmos-sdk v0.46.13 github.com/cosmos/ibc-go/v5 v5.2.1 - github.com/crypto-org-chain/cronos/memiavl v0.0.3-0.20230621152914-f83c74b904cd - github.com/crypto-org-chain/cronos/store v0.0.3-0.20230621152914-f83c74b904cd + github.com/crypto-org-chain/cronos/store v0.0.3 // release/v1.0.x github.com/crypto-org-chain/cronos/versiondb v0.0.0-20230623043455-e162787ed0b9 github.com/gogo/protobuf v1.3.3 @@ -74,6 +73,7 @@ require ( github.com/cosmos/iavl v0.19.6 // indirect github.com/cosmos/ledger-cosmos-go v0.12.2 // indirect github.com/creachadair/taskgroup v0.3.2 // indirect + github.com/crypto-org-chain/cronos/memiavl v0.0.3 // indirect github.com/danieljoos/wincred v1.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect diff --git a/go.sum b/go.sum index bac475d15..8072a29e0 100644 --- a/go.sum +++ b/go.sum @@ -420,10 +420,10 @@ github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7Do github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/crypto-org-chain/cometbft-db v0.0.0-20230412133340-ac70df4b45f6 h1:d4h4Ki1UE/LF6CKwYEm3OZ+HIBCrzSmOokG1vce0O98= github.com/crypto-org-chain/cometbft-db v0.0.0-20230412133340-ac70df4b45f6/go.mod h1:hF5aclS++7WrW8USOA3zPeKI0CuzwUD2TPYug25ANlQ= -github.com/crypto-org-chain/cronos/memiavl v0.0.3-0.20230621152914-f83c74b904cd h1:ONnKixvnZU/tgQwcFXdMVpDyADUBXnjKaAFTk4yY/Jw= -github.com/crypto-org-chain/cronos/memiavl v0.0.3-0.20230621152914-f83c74b904cd/go.mod h1:cGIAa6KfrvtjPc9ETOcvG/lKa97kU3GWFYVN37UFQ0w= -github.com/crypto-org-chain/cronos/store v0.0.3-0.20230621152914-f83c74b904cd h1:03L84ozFAcO8K6cJk1Oy00yruiFE8AIs7AFK+z7YAsc= -github.com/crypto-org-chain/cronos/store v0.0.3-0.20230621152914-f83c74b904cd/go.mod h1:6O69W4LrmEuBM8oAKqiXIp/mrxYiGyZO+ekQiiKxdR8= +github.com/crypto-org-chain/cronos/memiavl v0.0.3 h1:oNKmV2Vp14eeW4zN/Wvr6H4iYJ5j2YTYZqQwzKNeblM= +github.com/crypto-org-chain/cronos/memiavl v0.0.3/go.mod h1:k3+p+k+HzXx+NoqULMKzai1WHm5z+9CYGO/T9EVbb4w= +github.com/crypto-org-chain/cronos/store v0.0.3 h1:sOn2lCHPIbbC+bVXg/d38M8wrlmSjJcHifeExQVPvdc= +github.com/crypto-org-chain/cronos/store v0.0.3/go.mod h1:jpkj59pegLuibS3LRb1ieD+tZG1qc78f4623fTyBa/4= github.com/crypto-org-chain/cronos/versiondb v0.0.0-20230623043455-e162787ed0b9 h1:kgdqW/ZIn1DmYh6795XqwNJfTSFVfFIts7XTsw09NlQ= github.com/crypto-org-chain/cronos/versiondb v0.0.0-20230623043455-e162787ed0b9/go.mod h1:nJHTLUNSMpAGenR70PTAv7bZu0jCU+iIuQCe4O+r3co= github.com/crypto-org-chain/tm-db v0.6.8-0.20230424032152-87c7e7f4fb61 h1:Y5OuzOkZtjCfO53Jgzl+H8re6pOU4X205a1VMkDcUdk= diff --git a/gomod2nix.toml b/gomod2nix.toml index bf362b56b..b74ad3755 100644 --- a/gomod2nix.toml +++ b/gomod2nix.toml @@ -137,11 +137,11 @@ schema = 3 version = "v0.3.2" hash = "sha256-Y261IO/d9xjV0UScqHvo31broxvnKn4IQQC9Mu6jNkE=" [mod."github.com/crypto-org-chain/cronos/memiavl"] - version = "v0.0.3-0.20230621152914-f83c74b904cd" - hash = "sha256-cKUm7IniQ682rFL1mXI2wr/Q15MSb3nMyUxx+6aAMz8=" + version = "v0.0.3" + hash = "sha256-sWn4b1C+UDc94ccT1YZPshyx6DWxqH/jCGrw5AishFU=" [mod."github.com/crypto-org-chain/cronos/store"] - version = "v0.0.3-0.20230621152914-f83c74b904cd" - hash = "sha256-wZG6K7CmWzKPD0MQ/3ThXD50Miy+aysa9wCDWc3ONCc=" + version = "v0.0.3" + hash = "sha256-oDbvuSVeK2nPcmWaLfMIHBztuDl3Mm1K2sYNlC9j27U=" [mod."github.com/crypto-org-chain/cronos/versiondb"] version = "v0.0.0-20230623043455-e162787ed0b9" hash = "sha256-Z+uXkJk9zUrR5uf7MHsaDX27suu3DJO4CBgcA8TG20I="