From c823d18def0a146bb04196cf35a7edc18018bf9a Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Fri, 21 Jun 2024 12:14:50 +0200 Subject: [PATCH] refactor(server/v2): simplify server component init (#20742) --- server/v2/api/grpc/server.go | 26 +++++++++++++------------- server/v2/cometbft/server.go | 8 ++------ server/v2/commands.go | 2 +- server/v2/server.go | 18 +++++++++--------- server/v2/server_mock_test.go | 4 ++-- server/v2/server_test.go | 4 ++-- 6 files changed, 29 insertions(+), 33 deletions(-) diff --git a/server/v2/api/grpc/server.go b/server/v2/api/grpc/server.go index 9d3c95d925..7b9d62e316 100644 --- a/server/v2/api/grpc/server.go +++ b/server/v2/api/grpc/server.go @@ -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() } diff --git a/server/v2/cometbft/server.go b/server/v2/cometbft/server.go index eb9ca0d41e..d51dfa245a 100644 --- a/server/v2/cometbft/server.go +++ b/server/v2/cometbft/server.go @@ -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 { diff --git a/server/v2/commands.go b/server/v2/commands.go index 82d7cb869e..47c6ea797e 100644 --- a/server/v2/commands.go +++ b/server/v2/commands.go @@ -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 } diff --git a/server/v2/server.go b/server/v2/server.go index bfdccaf37f..aaa206e5b4 100644 --- a/server/v2/server.go +++ b/server/v2/server.go @@ -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. diff --git a/server/v2/server_mock_test.go b/server/v2/server_mock_test.go index f805c97a16..10641a153e 100644 --- a/server/v2/server_mock_test.go +++ b/server/v2/server_mock_test.go @@ -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 } diff --git a/server/v2/server_test.go b/server/v2/server_test.go index 2693a4674a..22a76fa538 100644 --- a/server/v2/server_test.go +++ b/server/v2/server_test.go @@ -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() }