Skip to content
This repository was archived by the owner on Apr 4, 2024. It is now read-only.

Commit f1337aa

Browse files
authored
support customize db opener in StartCmd (#1615)
* support customize db opener in `StartCmd` * Update CHANGELOG.md * pass to dbOpener, so we can control different options through cli flags * add comments
1 parent 47fdfd3 commit f1337aa

File tree

4 files changed

+39
-17
lines changed

4 files changed

+39
-17
lines changed

CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ Ref: https://keepachangelog.com/en/1.0.0/
4343
* (rpc) [#1613](https://github.com/evmos/ethermint/pull/1613) Change the default json-rpc listen address to localhost.
4444
* (rpc) [#1611](https://github.com/evmos/ethermint/pull/1611) Add missing next fee in fee history, fix wrong oldestBlock and align earliest input as ethereum.
4545

46+
### Improvements
47+
48+
* (cli) [#1615](https://github.com/evmos/ethermint/pull/1615) Support customize db opener in `StartCmd`.
49+
4650
## [v0.21.0-rc1] - 2022-1-13
4751

4852
### State Machine Breaking

cmd/ethermintd/root.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ func NewRootCmd() (*cobra.Command, params.EncodingConfig) {
130130
)
131131

132132
a := appCreator{encodingConfig}
133-
server.AddCommands(rootCmd, app.DefaultNodeHome, a.newApp, a.appExport, addModuleInitFlags)
133+
server.AddCommands(rootCmd, server.NewDefaultStartOptions(a.newApp, app.DefaultNodeHome), a.appExport, addModuleInitFlags)
134134

135135
// add keybase, auxiliary RPC, query, and tx child commands
136136
rootCmd.AddCommand(

server/start.go

+30-11
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,28 @@ import (
6868
ethermint "github.com/evmos/ethermint/types"
6969
)
7070

71+
// DBOpener is a function to open `application.db`, potentially with customized options.
72+
type DBOpener func(opts types.AppOptions, rootDir string, backend dbm.BackendType) (dbm.DB, error)
73+
74+
// StartOptions defines options that can be customized in `StartCmd`
75+
type StartOptions struct {
76+
AppCreator types.AppCreator
77+
DefaultNodeHome string
78+
DBOpener DBOpener
79+
}
80+
81+
// NewDefaultStartOptions use the default db opener provided in tm-db.
82+
func NewDefaultStartOptions(appCreator types.AppCreator, defaultNodeHome string) StartOptions {
83+
return StartOptions{
84+
AppCreator: appCreator,
85+
DefaultNodeHome: defaultNodeHome,
86+
DBOpener: openDB,
87+
}
88+
}
89+
7190
// StartCmd runs the service passed in, either stand-alone or in-process with
7291
// Tendermint.
73-
func StartCmd(appCreator types.AppCreator, defaultNodeHome string) *cobra.Command {
92+
func StartCmd(opts StartOptions) *cobra.Command {
7493
cmd := &cobra.Command{
7594
Use: "start",
7695
Short: "Run the full node",
@@ -119,7 +138,7 @@ which accepts a path for the resulting pprof file.
119138
withTM, _ := cmd.Flags().GetBool(srvflags.WithTendermint)
120139
if !withTM {
121140
serverCtx.Logger.Info("starting ABCI without Tendermint")
122-
return startStandAlone(serverCtx, appCreator)
141+
return startStandAlone(serverCtx, opts)
123142
}
124143

125144
serverCtx.Logger.Info("Unlocking keyring")
@@ -136,7 +155,7 @@ which accepts a path for the resulting pprof file.
136155
serverCtx.Logger.Info("starting ABCI with Tendermint")
137156

138157
// amino is needed here for backwards compatibility of REST routes
139-
err = startInProcess(serverCtx, clientCtx, appCreator)
158+
err = startInProcess(serverCtx, clientCtx, opts)
140159
errCode, ok := err.(server.ErrorCode)
141160
if !ok {
142161
return err
@@ -147,7 +166,7 @@ which accepts a path for the resulting pprof file.
147166
},
148167
}
149168

150-
cmd.Flags().String(flags.FlagHome, defaultNodeHome, "The application home directory")
169+
cmd.Flags().String(flags.FlagHome, opts.DefaultNodeHome, "The application home directory")
151170
cmd.Flags().Bool(srvflags.WithTendermint, true, "Run abci app embedded in-process with tendermint")
152171
cmd.Flags().String(srvflags.Address, "tcp://0.0.0.0:26658", "Listen address")
153172
cmd.Flags().String(srvflags.Transport, "socket", "Transport protocol: socket, grpc")
@@ -206,12 +225,12 @@ which accepts a path for the resulting pprof file.
206225
return cmd
207226
}
208227

209-
func startStandAlone(ctx *server.Context, appCreator types.AppCreator) error {
228+
func startStandAlone(ctx *server.Context, opts StartOptions) error {
210229
addr := ctx.Viper.GetString(srvflags.Address)
211230
transport := ctx.Viper.GetString(srvflags.Transport)
212231
home := ctx.Viper.GetString(flags.FlagHome)
213232

214-
db, err := openDB(home, server.GetAppDBBackend(ctx.Viper))
233+
db, err := opts.DBOpener(ctx.Viper, home, server.GetAppDBBackend(ctx.Viper))
215234
if err != nil {
216235
return err
217236
}
@@ -228,7 +247,7 @@ func startStandAlone(ctx *server.Context, appCreator types.AppCreator) error {
228247
return err
229248
}
230249

231-
app := appCreator(ctx.Logger, db, traceWriter, ctx.Viper)
250+
app := opts.AppCreator(ctx.Logger, db, traceWriter, ctx.Viper)
232251

233252
config, err := config.GetConfig(ctx.Viper)
234253
if err != nil {
@@ -269,7 +288,7 @@ func startStandAlone(ctx *server.Context, appCreator types.AppCreator) error {
269288
}
270289

271290
// legacyAminoCdc is used for the legacy REST API
272-
func startInProcess(ctx *server.Context, clientCtx client.Context, appCreator types.AppCreator) (err error) {
291+
func startInProcess(ctx *server.Context, clientCtx client.Context, opts StartOptions) (err error) {
273292
cfg := ctx.Config
274293
home := cfg.RootDir
275294
logger := ctx.Logger
@@ -300,7 +319,7 @@ func startInProcess(ctx *server.Context, clientCtx client.Context, appCreator ty
300319
}()
301320
}
302321

303-
db, err := openDB(home, server.GetAppDBBackend(ctx.Viper))
322+
db, err := opts.DBOpener(ctx.Viper, home, server.GetAppDBBackend(ctx.Viper))
304323
if err != nil {
305324
logger.Error("failed to open DB", "error", err.Error())
306325
return err
@@ -330,7 +349,7 @@ func startInProcess(ctx *server.Context, clientCtx client.Context, appCreator ty
330349
return err
331350
}
332351

333-
app := appCreator(ctx.Logger, db, traceWriter, ctx.Viper)
352+
app := opts.AppCreator(ctx.Logger, db, traceWriter, ctx.Viper)
334353

335354
nodeKey, err := p2p.LoadOrGenNodeKey(cfg.NodeKeyFile())
336355
if err != nil {
@@ -625,7 +644,7 @@ func startInProcess(ctx *server.Context, clientCtx client.Context, appCreator ty
625644
return server.WaitForQuitSignals()
626645
}
627646

628-
func openDB(rootDir string, backendType dbm.BackendType) (dbm.DB, error) {
647+
func openDB(_ types.AppOptions, rootDir string, backendType dbm.BackendType) (dbm.DB, error) {
629648
dataDir := filepath.Join(rootDir, "data")
630649
return dbm.NewDB("application", backendType, dataDir)
631650
}

server/util.go

+4-5
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,7 @@ import (
3838
// AddCommands adds server commands
3939
func AddCommands(
4040
rootCmd *cobra.Command,
41-
defaultNodeHome string,
42-
appCreator types.AppCreator,
41+
opts StartOptions,
4342
appExport types.AppExporter,
4443
addStartFlags types.ModuleInitFlags,
4544
) {
@@ -57,15 +56,15 @@ func AddCommands(
5756
tmcmd.ResetStateCmd,
5857
)
5958

60-
startCmd := StartCmd(appCreator, defaultNodeHome)
59+
startCmd := StartCmd(opts)
6160
addStartFlags(startCmd)
6261

6362
rootCmd.AddCommand(
6463
startCmd,
6564
tendermintCmd,
66-
sdkserver.ExportCmd(appExport, defaultNodeHome),
65+
sdkserver.ExportCmd(appExport, opts.DefaultNodeHome),
6766
version.NewVersionCommand(),
68-
sdkserver.NewRollbackCmd(appCreator, defaultNodeHome),
67+
sdkserver.NewRollbackCmd(opts.AppCreator, opts.DefaultNodeHome),
6968

7069
// custom tx indexer command
7170
NewIndexTxCmd(),

0 commit comments

Comments
 (0)