Skip to content

Commit

Permalink
new method
Browse files Browse the repository at this point in the history
  • Loading branch information
yihuang committed May 18, 2023
1 parent f06c71c commit 0742817
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 27 deletions.
3 changes: 1 addition & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -213,8 +213,7 @@ Ref: https://keepachangelog.com/en/1.0.0/
* `simulation.NewOperationMsg` now marshals the operation msg as proto bytes instead of legacy amino JSON bytes.
* `simulation.NewOperationMsg` is now 2-arity instead of 3-arity with the obsolete argument `codec.ProtoCodec` removed.
* The field `OperationMsg.Msg` is now of type `[]byte` instead of `json.RawMessage`.
* (cli) [#16209](https://github.com/cosmos/cosmos-sdk/pull/16209) `StartCmd` now accepts struct `StartCmdOptions` as
parameter.
* (cli) [#16209](https://github.com/cosmos/cosmos-sdk/pull/16209) Add API `StartCmdWithOptions` to create customized start command.


### Client Breaking Changes
Expand Down
30 changes: 17 additions & 13 deletions server/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,12 +89,10 @@ const (
FlagMempoolMaxTxs = "mempool.max-txs"
)

// StartCmdOptions defines options that can be customized in `StartCmd`,
// only `AppCreator` and `DefaultNodeHome` are required, the other fields are optional.
// StartCmdOptions defines options that can be customized in `StartCmdWithOptions`,
type StartCmdOptions struct {
AppCreator types.AppCreator
DefaultNodeHome string
// DBOpener can be used to customize db opening, for example customize db options or support different db backends.
// DBOpener can be used to customize db opening, for example customize db options or support different db backends,
// default to the builtin db opener.
DBOpener func(rootDir string, backendType dbm.BackendType) (dbm.DB, error)
// PostSetup can be used to setup extra services under the same cancellable context,
// it's not called in stand-alone mode, only for in-process mode.
Expand All @@ -105,7 +103,13 @@ type StartCmdOptions struct {

// StartCmd runs the service passed in, either stand-alone or in-process with
// CometBFT.
func StartCmd(opts StartCmdOptions) *cobra.Command {
func StartCmd(appCreator types.AppCreator, defaultNodeHome string) *cobra.Command {
return StartCmdWithOptions(appCreator, defaultNodeHome, StartCmdOptions{})
}

// StartCmdWithOptions runs the service passed in, either stand-alone or in-process with
// CometBFT.
func StartCmdWithOptions(appCreator types.AppCreator, defaultNodeHome string, opts StartCmdOptions) *cobra.Command {
if opts.DBOpener == nil {
opts.DBOpener = openDB
}
Expand Down Expand Up @@ -164,17 +168,17 @@ is performed. Note, when enabled, gRPC will also be automatically enabled.
serverCtx.Logger.Info("starting ABCI without CometBFT")

return wrapCPUProfile(serverCtx, func() error {
return startStandAlone(serverCtx, opts)
return startStandAlone(serverCtx, appCreator, opts)
})
}

return wrapCPUProfile(serverCtx, func() error {
return startInProcess(serverCtx, clientCtx, opts)
return startInProcess(serverCtx, clientCtx, appCreator, opts)
})
},
}

cmd.Flags().String(flags.FlagHome, opts.DefaultNodeHome, "The application home directory")
cmd.Flags().String(flags.FlagHome, defaultNodeHome, "The application home directory")
cmd.Flags().Bool(flagWithComet, true, "Run abci app embedded in-process with CometBFT")
cmd.Flags().String(flagAddress, "tcp://0.0.0.0:26658", "Listen address")
cmd.Flags().String(flagTransport, "socket", "Transport protocol: socket, grpc")
Expand Down Expand Up @@ -226,7 +230,7 @@ is performed. Note, when enabled, gRPC will also be automatically enabled.
return cmd
}

func startStandAlone(svrCtx *Context, opts StartCmdOptions) error {
func startStandAlone(svrCtx *Context, appCreator types.AppCreator, opts StartCmdOptions) error {
addr := svrCtx.Viper.GetString(flagAddress)
transport := svrCtx.Viper.GetString(flagTransport)
home := svrCtx.Viper.GetString(flags.FlagHome)
Expand All @@ -244,7 +248,7 @@ func startStandAlone(svrCtx *Context, opts StartCmdOptions) error {
return err
}

app := opts.AppCreator(svrCtx.Logger, db, traceWriter, svrCtx.Viper)
app := appCreator(svrCtx.Logger, db, traceWriter, svrCtx.Viper)

config, err := serverconfig.GetConfig(svrCtx.Viper)
if err != nil {
Expand Down Expand Up @@ -290,7 +294,7 @@ func startStandAlone(svrCtx *Context, opts StartCmdOptions) error {
return g.Wait()
}

func startInProcess(svrCtx *Context, clientCtx client.Context, opts StartCmdOptions) error {
func startInProcess(svrCtx *Context, clientCtx client.Context, appCreator types.AppCreator, opts StartCmdOptions) error {
cmtCfg := svrCtx.Config
home := cmtCfg.RootDir

Expand All @@ -309,7 +313,7 @@ func startInProcess(svrCtx *Context, clientCtx client.Context, opts StartCmdOpti
return err
}

app := opts.AppCreator(svrCtx.Logger, db, traceWriter, svrCtx.Viper)
app := appCreator(svrCtx.Logger, db, traceWriter, svrCtx.Viper)

// TODO: Move this to only be done if were launching the node. (So not in GRPC-only mode)
nodeKey, err := p2p.LoadOrGenNodeKey(cmtCfg.NodeKeyFile())
Expand Down
5 changes: 1 addition & 4 deletions server/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -323,10 +323,7 @@ func AddCommands(rootCmd *cobra.Command, defaultNodeHome string, appCreator type
BootstrapStateCmd(appCreator),
)

startCmd := StartCmd(StartCmdOptions{
AppCreator: appCreator,
DefaultNodeHome: defaultNodeHome,
})
startCmd := StartCmd(appCreator, defaultNodeHome)
addStartFlags(startCmd)

rootCmd.AddCommand(
Expand Down
16 changes: 8 additions & 8 deletions server/util_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ func preRunETestImpl(cmd *cobra.Command, args []string) error {

func TestInterceptConfigsPreRunHandlerCreatesConfigFilesWhenMissing(t *testing.T) {
tempDir := t.TempDir()
cmd := server.StartCmd(server.StartCmdOptions{AppCreator: nil, DefaultNodeHome: "/foobar"})
cmd := server.StartCmd(nil, "/foobar")
if err := cmd.Flags().Set(flags.FlagHome, tempDir); err != nil {
t.Fatalf("Could not set home flag [%T] %v", err, err)
}
Expand Down Expand Up @@ -115,7 +115,7 @@ func TestInterceptConfigsPreRunHandlerReadsConfigToml(t *testing.T) {
t.Fatalf("Failed closing config.toml: %v", err)
}

cmd := server.StartCmd(StartCmdOptions{AppCreator: nil, DefaultNodeHome: "/foobar"})
cmd := server.StartCmd(nil, "/foobar")
if err := cmd.Flags().Set(flags.FlagHome, tempDir); err != nil {
t.Fatalf("Could not set home flag [%T] %v", err, err)
}
Expand Down Expand Up @@ -155,7 +155,7 @@ func TestInterceptConfigsPreRunHandlerReadsAppToml(t *testing.T) {
if err := writer.Close(); err != nil {
t.Fatalf("Failed closing app.toml: %v", err)
}
cmd := server.StartCmd(StartCmdOptions{AppCreator: nil, DefaultNodeHome: tempDir})
cmd := server.StartCmd(nil, tempDir)

cmd.PreRunE = preRunETestImpl

Expand All @@ -174,7 +174,7 @@ func TestInterceptConfigsPreRunHandlerReadsAppToml(t *testing.T) {
func TestInterceptConfigsPreRunHandlerReadsFlags(t *testing.T) {
const testAddr = "tcp://127.1.2.3:12345"
tempDir := t.TempDir()
cmd := server.StartCmd(StartCmdOptions{AppCreator: nil, DefaultNodeHome: "/foobar"})
cmd := server.StartCmd(nil, "/foobar")

if err := cmd.Flags().Set(flags.FlagHome, tempDir); err != nil {
t.Fatalf("Could not set home flag [%T] %v", err, err)
Expand Down Expand Up @@ -202,7 +202,7 @@ func TestInterceptConfigsPreRunHandlerReadsFlags(t *testing.T) {
func TestInterceptConfigsPreRunHandlerReadsEnvVars(t *testing.T) {
const testAddr = "tcp://127.1.2.3:12345"
tempDir := t.TempDir()
cmd := server.StartCmd(StartCmdOptions{AppCreator: nil, DefaultNodeHome: "/foobar"})
cmd := server.StartCmd(nil, "/foobar")
if err := cmd.Flags().Set(flags.FlagHome, tempDir); err != nil {
t.Fatalf("Could not set home flag [%T] %v", err, err)
}
Expand Down Expand Up @@ -288,7 +288,7 @@ func newPrecedenceCommon(t *testing.T) precedenceCommon {
})

// Set up the command object that is used in this test
retval.cmd = server.StartCmd(StartCmdOptions{AppCreator: nil, DefaultNodeHome: tempDir})
retval.cmd = server.StartCmd(nil, tempDir)
retval.cmd.PreRunE = preRunETestImpl

return retval
Expand Down Expand Up @@ -395,7 +395,7 @@ func TestInterceptConfigsWithBadPermissions(t *testing.T) {
if err := os.Mkdir(subDir, 0o600); err != nil {
t.Fatalf("Failed to create sub directory: %v", err)
}
cmd := server.StartCmd(StartCmdOptions{AppCreator: nil, DefaultNodeHome: "/foobar"})
cmd := server.StartCmd(nil, "/foobar")
if err := cmd.Flags().Set(flags.FlagHome, subDir); err != nil {
t.Fatalf("Could not set home flag [%T] %v", err, err)
}
Expand Down Expand Up @@ -432,7 +432,7 @@ func TestEmptyMinGasPrices(t *testing.T) {
config.WriteConfigFile(appCfgTempFilePath, appConf)

// Run StartCmd.
cmd = server.StartCmd(StartCmdOptions{AppCreator: nil, DefaultNodeHome: tempDir})
cmd = server.StartCmd(nil, tempDir)
cmd.PreRunE = func(cmd *cobra.Command, _ []string) error {
ctx, err := server.InterceptConfigsAndCreateContext(cmd, "", nil, cmtcfg.DefaultConfig())
if err != nil {
Expand Down

0 comments on commit 0742817

Please sign in to comment.