From 7331cd20651506aae94b9c2fbe84cc915e9b8a14 Mon Sep 17 00:00:00 2001 From: yihuang Date: Fri, 5 Aug 2022 21:01:20 +0800 Subject: [PATCH] feat: support dynamic app db backend flag (#1226) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * support dynamic app db backend * address pr reviews * add comment * Update server/start.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> --- CHANGELOG.md | 1 + Makefile | 25 ++++++++++++++++++------- cmd/ethermintd/root.go | 4 ++++ server/flags/flags.go | 4 +++- server/start.go | 1 + 5 files changed, 27 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c2237c1..e62e5b4e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -54,6 +54,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Improvements * (feemarket) [\#1165](https://github.com/evmos/ethermint/pull/1165) Add hint in specs about different gas terminology for gas in Cosmos and Ethereum. +* (cli) [#1226](https://github.com/evmos/ethermint/pull/1226) Add custom app db backend flag. ### Bug Fixes diff --git a/Makefile b/Makefile index 726d3586..763fcf96 100755 --- a/Makefile +++ b/Makefile @@ -15,6 +15,9 @@ HTTPS_GIT := https://github.com/evmos/ethermint.git PROJECT_NAME = $(shell git remote get-url origin | xargs basename -s .git) DOCKER := $(shell which docker) DOCKER_BUF := $(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace bufbuild/buf:1.0.0-rc8 +# RocksDB is a native dependency, so we don't assume the library is installed. +# Instead, it must be explicitly enabled and we warn when it is not. +ENABLE_ROCKSDB ?= false export GO111MODULE = on @@ -49,9 +52,6 @@ ifeq ($(LEDGER_ENABLED),true) endif endif -ifeq (cleveldb,$(findstring cleveldb,$(COSMOS_BUILD_OPTIONS))) - build_tags += gcc -endif build_tags += $(BUILD_TAGS) build_tags := $(strip $(build_tags)) @@ -69,23 +69,31 @@ ldflags = -X github.com/cosmos/cosmos-sdk/version.Name=ethermint \ -X "github.com/cosmos/cosmos-sdk/version.BuildTags=$(build_tags_comma_sep)" \ -X github.com/tendermint/tendermint/version.TMCoreSemVer=$(TMVERSION) +ifeq ($(ENABLE_ROCKSDB),true) + BUILD_TAGS += rocksdb_build + test_tags += rocksdb_build +else + $(warning RocksDB support is disabled; to build and test with RocksDB support, set ENABLE_ROCKSDB=true) +endif + # DB backend selection ifeq (cleveldb,$(findstring cleveldb,$(COSMOS_BUILD_OPTIONS))) - ldflags += -X github.com/cosmos/cosmos-sdk/types.DBBackend=cleveldb + BUILD_TAGS += gcc endif ifeq (badgerdb,$(findstring badgerdb,$(COSMOS_BUILD_OPTIONS))) - ldflags += -X github.com/cosmos/cosmos-sdk/types.DBBackend=badgerdb + BUILD_TAGS += badgerdb endif # handle rocksdb ifeq (rocksdb,$(findstring rocksdb,$(COSMOS_BUILD_OPTIONS))) + ifneq ($(ENABLE_ROCKSDB),true) + $(error Cannot use RocksDB backend unless ENABLE_ROCKSDB=true) + endif CGO_ENABLED=1 BUILD_TAGS += rocksdb - ldflags += -X github.com/cosmos/cosmos-sdk/types.DBBackend=rocksdb endif # handle boltdb ifeq (boltdb,$(findstring boltdb,$(COSMOS_BUILD_OPTIONS))) BUILD_TAGS += boltdb - ldflags += -X github.com/cosmos/cosmos-sdk/types.DBBackend=boltdb endif ifeq (,$(findstring nostrip,$(COSMOS_BUILD_OPTIONS))) @@ -94,6 +102,9 @@ endif ldflags += $(LDFLAGS) ldflags := $(strip $(ldflags)) +build_tags += $(BUILD_TAGS) +build_tags := $(strip $(build_tags)) + BUILD_FLAGS := -tags "$(build_tags)" -ldflags '$(ldflags)' # check for nostrip option ifeq (,$(findstring nostrip,$(COSMOS_BUILD_OPTIONS))) diff --git a/cmd/ethermintd/root.go b/cmd/ethermintd/root.go index 96c106ee..5e17d8de 100644 --- a/cmd/ethermintd/root.go +++ b/cmd/ethermintd/root.go @@ -210,6 +210,10 @@ func (a appCreator) newApp(logger tmlog.Logger, db dbm.DB, traceStore io.Writer, } snapshotDir := filepath.Join(cast.ToString(appOpts.Get(flags.FlagHome)), "data", "snapshots") + if err = os.MkdirAll(snapshotDir, os.ModePerm); err != nil { + panic(err) + } + snapshotDB, err := dbm.NewDB("metadata", sdkserver.GetAppDBBackend(appOpts), snapshotDir) if err != nil { panic(err) diff --git a/server/flags/flags.go b/server/flags/flags.go index dc98e86a..67fb0cc7 100644 --- a/server/flags/flags.go +++ b/server/flags/flags.go @@ -7,13 +7,15 @@ import ( "github.com/spf13/viper" ) -// Tendermint full-node start flags +// Tendermint/cosmos-sdk full-node start flags const ( WithTendermint = "with-tendermint" Address = "address" Transport = "transport" TraceStore = "trace-store" CPUProfile = "cpu-profile" + // The type of database for application and snapshots databases + AppDBBackend = "app-db-backend" ) // GRPC-related flags. diff --git a/server/start.go b/server/start.go index 22162e05..c4e979f3 100644 --- a/server/start.go +++ b/server/start.go @@ -141,6 +141,7 @@ which accepts a path for the resulting pprof file. cmd.Flags().Uint64(server.FlagPruningInterval, 0, "Height interval at which pruned heights are removed from disk (ignored if pruning is not 'custom')") cmd.Flags().Uint(server.FlagInvCheckPeriod, 0, "Assert registered invariants every N blocks") cmd.Flags().Uint64(server.FlagMinRetainBlocks, 0, "Minimum block height offset during ABCI commit to prune Tendermint blocks") + cmd.Flags().String(srvflags.AppDBBackend, "", "The type of database for application and snapshots databases") cmd.Flags().Bool(srvflags.GRPCEnable, true, "Define if the gRPC server should be enabled") cmd.Flags().String(srvflags.GRPCAddress, serverconfig.DefaultGRPCAddress, "the gRPC server address to listen on")