refactor(server/v2): simplify server component init (#20742)
This commit is contained in:
parent
207b30262f
commit
c823d18def
@ -35,17 +35,17 @@ type GRPCService interface {
|
||||
RegisterGRPCServer(gogogrpc.Server)
|
||||
}
|
||||
|
||||
func New() GRPCServer {
|
||||
return GRPCServer{}
|
||||
func New() *GRPCServer {
|
||||
return &GRPCServer{}
|
||||
}
|
||||
|
||||
// Init returns a correctly configured and initialized gRPC server.
|
||||
// Note, the caller is responsible for starting the server.
|
||||
func (g GRPCServer) Init(appI serverv2.AppI[transaction.Tx], v *viper.Viper, logger log.Logger) (serverv2.ServerComponent[transaction.Tx], error) {
|
||||
func (g *GRPCServer) Init(appI serverv2.AppI[transaction.Tx], v *viper.Viper, logger log.Logger) error {
|
||||
cfg := DefaultConfig()
|
||||
if v != nil {
|
||||
if err := v.Sub(serverName).Unmarshal(&cfg); err != nil {
|
||||
return GRPCServer{}, fmt.Errorf("failed to unmarshal config: %w", err)
|
||||
return fmt.Errorf("failed to unmarshal config: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
@ -61,18 +61,18 @@ func (g GRPCServer) Init(appI serverv2.AppI[transaction.Tx], v *viper.Viper, log
|
||||
// the gRPC server exposes.
|
||||
gogoreflection.Register(grpcSrv)
|
||||
|
||||
return GRPCServer{
|
||||
grpcSrv: grpcSrv,
|
||||
config: cfg,
|
||||
logger: logger.With(log.ModuleKey, serverName),
|
||||
}, nil
|
||||
g.grpcSrv = grpcSrv
|
||||
g.config = cfg
|
||||
g.logger = logger.With(log.ModuleKey, serverName)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (g GRPCServer) Name() string {
|
||||
func (g *GRPCServer) Name() string {
|
||||
return serverName
|
||||
}
|
||||
|
||||
func (g GRPCServer) Start(ctx context.Context) error {
|
||||
func (g *GRPCServer) Start(ctx context.Context) error {
|
||||
listener, err := net.Listen("tcp", g.config.Address)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to listen on address %s: %w", g.config.Address, err)
|
||||
@ -95,14 +95,14 @@ func (g GRPCServer) Start(ctx context.Context) error {
|
||||
return err
|
||||
}
|
||||
|
||||
func (g GRPCServer) Stop(ctx context.Context) error {
|
||||
func (g *GRPCServer) Stop(ctx context.Context) error {
|
||||
g.logger.Info("stopping gRPC server...", "address", g.config.Address)
|
||||
g.grpcSrv.GracefulStop()
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (g GRPCServer) Config() any {
|
||||
func (g *GRPCServer) Config() any {
|
||||
if g.config == nil || g.config == (&Config{}) {
|
||||
return DefaultConfig()
|
||||
}
|
||||
|
||||
@ -70,7 +70,7 @@ func New[T transaction.Tx](txCodec transaction.Codec[T]) *CometBFTServer[T] {
|
||||
}
|
||||
}
|
||||
|
||||
func (s *CometBFTServer[T]) Init(appI serverv2.AppI[T], v *viper.Viper, logger log.Logger) (serverv2.ServerComponent[T], error) {
|
||||
func (s *CometBFTServer[T]) Init(appI serverv2.AppI[T], v *viper.Viper, logger log.Logger) error {
|
||||
store := appI.GetStore().(types.Store)
|
||||
|
||||
cfg := Config{CmtConfig: GetConfigFromViper(v), ConsensusAuthority: appI.GetConsensusAuthority()}
|
||||
@ -104,11 +104,7 @@ func (s *CometBFTServer[T]) Init(appI serverv2.AppI[T], v *viper.Viper, logger l
|
||||
s.App = consensus
|
||||
s.logger = logger
|
||||
|
||||
return &CometBFTServer[T]{
|
||||
logger: logger,
|
||||
App: consensus,
|
||||
config: cfg,
|
||||
}, nil
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *CometBFTServer[T]) Name() string {
|
||||
|
||||
@ -42,7 +42,7 @@ func Commands(rootCmd *cobra.Command, newApp AppCreator[transaction.Tx], logger
|
||||
|
||||
app := newApp(l, v)
|
||||
|
||||
if _, err := server.Init(app, v, l); err != nil {
|
||||
if err := server.Init(app, v, l); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
@ -21,7 +21,7 @@ type ServerComponent[T transaction.Tx] interface {
|
||||
|
||||
Start(context.Context) error
|
||||
Stop(context.Context) error
|
||||
Init(AppI[T], *viper.Viper, log.Logger) (ServerComponent[T], error)
|
||||
Init(AppI[T], *viper.Viper, log.Logger) error
|
||||
}
|
||||
|
||||
// HasCLICommands is a server module that has CLI commands.
|
||||
@ -145,19 +145,19 @@ func (s *Server) Configs() map[string]any {
|
||||
}
|
||||
|
||||
// Configs returns all configs of all server components.
|
||||
func (s *Server) Init(appI AppI[transaction.Tx], v *viper.Viper, logger log.Logger) (ServerComponent[transaction.Tx], error) {
|
||||
func (s *Server) Init(appI AppI[transaction.Tx], v *viper.Viper, logger log.Logger) error {
|
||||
var components []ServerComponent[transaction.Tx]
|
||||
for _, mod := range s.components {
|
||||
mod := mod
|
||||
module, err := mod.Init(appI, v, logger)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
if err := mod.Init(appI, v, logger); err != nil {
|
||||
return err
|
||||
}
|
||||
components = append(components, module)
|
||||
}
|
||||
s.components = components
|
||||
|
||||
return s, nil
|
||||
components = append(components, mod)
|
||||
}
|
||||
|
||||
s.components = components
|
||||
return nil
|
||||
}
|
||||
|
||||
// WriteConfig writes the config to the given path.
|
||||
|
||||
@ -55,6 +55,6 @@ func (s *mockServer) Config() any {
|
||||
return MockServerDefaultConfig()
|
||||
}
|
||||
|
||||
func (s *mockServer) Init(appI serverv2.AppI[transaction.Tx], v *viper.Viper, logger log.Logger) (serverv2.ServerComponent[transaction.Tx], error) {
|
||||
return nil, nil
|
||||
func (s *mockServer) Init(appI serverv2.AppI[transaction.Tx], v *viper.Viper, logger log.Logger) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -58,8 +58,8 @@ func TestServer(t *testing.T) {
|
||||
}
|
||||
|
||||
logger := log.NewLogger(os.Stdout)
|
||||
grpcServer, err := grpc.New().Init(&mockApp[transaction.Tx]{}, v, logger)
|
||||
if err != nil {
|
||||
grpcServer := grpc.New()
|
||||
if err := grpcServer.Init(&mockApp[transaction.Tx]{}, v, logger); err != nil {
|
||||
t.Log(err)
|
||||
t.Fail()
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user