refactor(server/v2): simplify server component init (#20742)

This commit is contained in:
Julien Robert 2024-06-21 12:14:50 +02:00 committed by GitHub
parent 207b30262f
commit c823d18def
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 29 additions and 33 deletions

View File

@ -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()
}

View File

@ -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 {

View File

@ -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
}

View File

@ -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.

View File

@ -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
}

View File

@ -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()
}