@@ -68,9 +68,28 @@ import (
68
68
ethermint "github.com/evmos/ethermint/types"
69
69
)
70
70
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
+
71
90
// StartCmd runs the service passed in, either stand-alone or in-process with
72
91
// Tendermint.
73
- func StartCmd (appCreator types. AppCreator , defaultNodeHome string ) * cobra.Command {
92
+ func StartCmd (opts StartOptions ) * cobra.Command {
74
93
cmd := & cobra.Command {
75
94
Use : "start" ,
76
95
Short : "Run the full node" ,
@@ -119,7 +138,7 @@ which accepts a path for the resulting pprof file.
119
138
withTM , _ := cmd .Flags ().GetBool (srvflags .WithTendermint )
120
139
if ! withTM {
121
140
serverCtx .Logger .Info ("starting ABCI without Tendermint" )
122
- return startStandAlone (serverCtx , appCreator )
141
+ return startStandAlone (serverCtx , opts )
123
142
}
124
143
125
144
serverCtx .Logger .Info ("Unlocking keyring" )
@@ -136,7 +155,7 @@ which accepts a path for the resulting pprof file.
136
155
serverCtx .Logger .Info ("starting ABCI with Tendermint" )
137
156
138
157
// amino is needed here for backwards compatibility of REST routes
139
- err = startInProcess (serverCtx , clientCtx , appCreator )
158
+ err = startInProcess (serverCtx , clientCtx , opts )
140
159
errCode , ok := err .(server.ErrorCode )
141
160
if ! ok {
142
161
return err
@@ -147,7 +166,7 @@ which accepts a path for the resulting pprof file.
147
166
},
148
167
}
149
168
150
- cmd .Flags ().String (flags .FlagHome , defaultNodeHome , "The application home directory" )
169
+ cmd .Flags ().String (flags .FlagHome , opts . DefaultNodeHome , "The application home directory" )
151
170
cmd .Flags ().Bool (srvflags .WithTendermint , true , "Run abci app embedded in-process with tendermint" )
152
171
cmd .Flags ().String (srvflags .Address , "tcp://0.0.0.0:26658" , "Listen address" )
153
172
cmd .Flags ().String (srvflags .Transport , "socket" , "Transport protocol: socket, grpc" )
@@ -206,12 +225,12 @@ which accepts a path for the resulting pprof file.
206
225
return cmd
207
226
}
208
227
209
- func startStandAlone (ctx * server.Context , appCreator types. AppCreator ) error {
228
+ func startStandAlone (ctx * server.Context , opts StartOptions ) error {
210
229
addr := ctx .Viper .GetString (srvflags .Address )
211
230
transport := ctx .Viper .GetString (srvflags .Transport )
212
231
home := ctx .Viper .GetString (flags .FlagHome )
213
232
214
- db , err := openDB ( home , server .GetAppDBBackend (ctx .Viper ))
233
+ db , err := opts . DBOpener ( ctx . Viper , home , server .GetAppDBBackend (ctx .Viper ))
215
234
if err != nil {
216
235
return err
217
236
}
@@ -228,7 +247,7 @@ func startStandAlone(ctx *server.Context, appCreator types.AppCreator) error {
228
247
return err
229
248
}
230
249
231
- app := appCreator (ctx .Logger , db , traceWriter , ctx .Viper )
250
+ app := opts . AppCreator (ctx .Logger , db , traceWriter , ctx .Viper )
232
251
233
252
config , err := config .GetConfig (ctx .Viper )
234
253
if err != nil {
@@ -269,7 +288,7 @@ func startStandAlone(ctx *server.Context, appCreator types.AppCreator) error {
269
288
}
270
289
271
290
// 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 ) {
273
292
cfg := ctx .Config
274
293
home := cfg .RootDir
275
294
logger := ctx .Logger
@@ -300,7 +319,7 @@ func startInProcess(ctx *server.Context, clientCtx client.Context, appCreator ty
300
319
}()
301
320
}
302
321
303
- db , err := openDB ( home , server .GetAppDBBackend (ctx .Viper ))
322
+ db , err := opts . DBOpener ( ctx . Viper , home , server .GetAppDBBackend (ctx .Viper ))
304
323
if err != nil {
305
324
logger .Error ("failed to open DB" , "error" , err .Error ())
306
325
return err
@@ -330,7 +349,7 @@ func startInProcess(ctx *server.Context, clientCtx client.Context, appCreator ty
330
349
return err
331
350
}
332
351
333
- app := appCreator (ctx .Logger , db , traceWriter , ctx .Viper )
352
+ app := opts . AppCreator (ctx .Logger , db , traceWriter , ctx .Viper )
334
353
335
354
nodeKey , err := p2p .LoadOrGenNodeKey (cfg .NodeKeyFile ())
336
355
if err != nil {
@@ -625,7 +644,7 @@ func startInProcess(ctx *server.Context, clientCtx client.Context, appCreator ty
625
644
return server .WaitForQuitSignals ()
626
645
}
627
646
628
- func openDB (rootDir string , backendType dbm.BackendType ) (dbm.DB , error ) {
647
+ func openDB (_ types. AppOptions , rootDir string , backendType dbm.BackendType ) (dbm.DB , error ) {
629
648
dataDir := filepath .Join (rootDir , "data" )
630
649
return dbm .NewDB ("application" , backendType , dataDir )
631
650
}
0 commit comments