Skip to content

Commit 98405b1

Browse files
julienrbrtalessio
authored andcommitted
refactor(server/v2): kill viper from server components (cosmos#21663)
1 parent 846e9a8 commit 98405b1

12 files changed

Lines changed: 58 additions & 66 deletions

File tree

server/v2/api/grpc/server.go

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import (
1212

1313
"github.com/cosmos/gogoproto/proto"
1414
"github.com/spf13/pflag"
15-
"github.com/spf13/viper"
1615
"google.golang.org/grpc"
1716
"google.golang.org/grpc/codes"
1817
"google.golang.org/grpc/metadata"
@@ -47,19 +46,19 @@ func New[T transaction.Tx](cfgOptions ...CfgOption) *Server[T] {
4746

4847
// Init returns a correctly configured and initialized gRPC server.
4948
// Note, the caller is responsible for starting the server.
50-
func (s *Server[T]) Init(appI serverv2.AppI[T], v *viper.Viper, logger log.Logger) error {
51-
cfg := s.Config().(*Config)
52-
if v != nil {
53-
if err := serverv2.UnmarshalSubConfig(v, s.Name(), &cfg); err != nil {
49+
func (s *Server[T]) Init(appI serverv2.AppI[T], cfg map[string]any, logger log.Logger) error {
50+
serverCfg := s.Config().(*Config)
51+
if len(cfg) > 0 {
52+
if err := serverv2.UnmarshalSubConfig(cfg, s.Name(), &serverCfg); err != nil {
5453
return fmt.Errorf("failed to unmarshal config: %w", err)
5554
}
5655
}
5756
methodsMap := appI.GetGPRCMethodsToMessageMap()
5857

5958
grpcSrv := grpc.NewServer(
6059
grpc.ForceServerCodec(newProtoCodec(appI.InterfaceRegistry()).GRPCCodec()),
61-
grpc.MaxSendMsgSize(cfg.MaxSendMsgSize),
62-
grpc.MaxRecvMsgSize(cfg.MaxRecvMsgSize),
60+
grpc.MaxSendMsgSize(serverCfg.MaxSendMsgSize),
61+
grpc.MaxRecvMsgSize(serverCfg.MaxRecvMsgSize),
6362
grpc.UnknownServiceHandler(
6463
makeUnknownServiceHandler(methodsMap, appI.GetAppManager()),
6564
),
@@ -69,7 +68,7 @@ func (s *Server[T]) Init(appI serverv2.AppI[T], v *viper.Viper, logger log.Logge
6968
gogoreflection.Register(grpcSrv, slices.Collect(maps.Keys(methodsMap)), logger.With("sub-module", "grpc-reflection"))
7069

7170
s.grpcSrv = grpcSrv
72-
s.config = cfg
71+
s.config = serverCfg
7372
s.logger = logger.With(log.ModuleKey, s.Name())
7473

7574
return nil

server/v2/api/grpcgateway/server.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import (
1010
"github.com/cosmos/gogoproto/jsonpb"
1111
"github.com/gorilla/mux"
1212
"github.com/grpc-ecosystem/grpc-gateway/runtime"
13-
"github.com/spf13/viper"
1413
"google.golang.org/grpc"
1514

1615
"cosmossdk.io/core/transaction"
@@ -83,10 +82,10 @@ func (s *GRPCGatewayServer[T]) Config() any {
8382
return s.config
8483
}
8584

86-
func (s *GRPCGatewayServer[T]) Init(appI serverv2.AppI[transaction.Tx], v *viper.Viper, logger log.Logger) error {
87-
cfg := s.Config().(*Config)
88-
if v != nil {
89-
if err := serverv2.UnmarshalSubConfig(v, s.Name(), &cfg); err != nil {
85+
func (s *GRPCGatewayServer[T]) Init(appI serverv2.AppI[transaction.Tx], cfg map[string]any, logger log.Logger) error {
86+
serverCfg := s.Config().(*Config)
87+
if len(cfg) > 0 {
88+
if err := serverv2.UnmarshalSubConfig(cfg, s.Name(), &serverCfg); err != nil {
9089
return fmt.Errorf("failed to unmarshal config: %w", err)
9190
}
9291
}
@@ -95,7 +94,7 @@ func (s *GRPCGatewayServer[T]) Init(appI serverv2.AppI[transaction.Tx], v *viper
9594
// appI.RegisterGRPCGatewayRoutes(s.GRPCGatewayRouter, s.GRPCSrv)
9695

9796
s.logger = logger
98-
s.config = cfg
97+
s.config = serverCfg
9998

10099
return nil
101100
}

server/v2/cometbft/config.go

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@ package cometbft
22

33
import (
44
cmtcfg "github.com/cometbft/cometbft/config"
5-
"github.com/spf13/viper"
6-
7-
serverv2 "cosmossdk.io/server/v2"
85
)
96

107
// Config is the configuration for the CometBFT application
@@ -53,14 +50,3 @@ func OverwriteDefaultAppTomlConfig(newCfg *AppTomlConfig) CfgOption {
5350
cfg.AppTomlConfig = newCfg
5451
}
5552
}
56-
57-
func getConfigTomlFromViper(v *viper.Viper) *cmtcfg.Config {
58-
rootDir := v.GetString(serverv2.FlagHome)
59-
60-
conf := cmtcfg.DefaultConfig()
61-
if err := v.Unmarshal(conf); err != nil {
62-
return cmtcfg.DefaultConfig().SetRoot(rootDir)
63-
}
64-
65-
return conf.SetRoot(rootDir)
66-
}

server/v2/cometbft/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ require (
3737
github.com/grpc-ecosystem/grpc-gateway v1.16.0
3838
github.com/spf13/cobra v1.8.1
3939
github.com/spf13/pflag v1.0.5
40-
github.com/spf13/viper v1.19.0
4140
github.com/stretchr/testify v1.9.0
4241
google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117
4342
google.golang.org/grpc v1.66.1
@@ -150,6 +149,7 @@ require (
150149
github.com/sourcegraph/conc v0.3.0 // indirect
151150
github.com/spf13/afero v1.11.0 // indirect
152151
github.com/spf13/cast v1.7.0 // indirect
152+
github.com/spf13/viper v1.19.0 // indirect
153153
github.com/subosito/gotenv v1.6.0 // indirect
154154
github.com/supranational/blst v0.3.13 // indirect
155155
github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect

server/v2/cometbft/server.go

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import (
1919
"github.com/cometbft/cometbft/proxy"
2020
"github.com/spf13/cobra"
2121
"github.com/spf13/pflag"
22-
"github.com/spf13/viper"
2322

2423
"cosmossdk.io/core/transaction"
2524
"cosmossdk.io/log"
@@ -58,23 +57,31 @@ func New[T transaction.Tx](txCodec transaction.Codec[T], serverOptions ServerOpt
5857
}
5958
}
6059

61-
func (s *CometBFTServer[T]) Init(appI serverv2.AppI[T], v *viper.Viper, logger log.Logger) error {
60+
func (s *CometBFTServer[T]) Init(appI serverv2.AppI[T], cfg map[string]any, logger log.Logger) error {
61+
home, _ := cfg[serverv2.FlagHome].(string)
62+
6263
// get configs (app.toml + config.toml) from viper
6364
appTomlConfig := s.Config().(*AppTomlConfig)
64-
if v != nil {
65-
if err := serverv2.UnmarshalSubConfig(v, s.Name(), &appTomlConfig); err != nil {
65+
configTomlConfig := cmtcfg.DefaultConfig().SetRoot(home)
66+
if len(cfg) > 0 {
67+
if err := serverv2.UnmarshalSubConfig(cfg, s.Name(), &appTomlConfig); err != nil {
68+
return fmt.Errorf("failed to unmarshal config: %w", err)
69+
}
70+
71+
if err := serverv2.UnmarshalSubConfig(cfg, "", &configTomlConfig); err != nil {
6672
return fmt.Errorf("failed to unmarshal config: %w", err)
6773
}
6874
}
75+
6976
s.config = Config{
70-
ConfigTomlConfig: getConfigTomlFromViper(v),
77+
ConfigTomlConfig: configTomlConfig,
7178
AppTomlConfig: appTomlConfig,
7279
}
7380

74-
chainID := v.GetString(FlagChainID)
81+
chainID, _ := cfg[FlagChainID].(string)
7582
if chainID == "" {
7683
// fallback to genesis chain-id
77-
reader, err := os.Open(filepath.Join(v.GetString(serverv2.FlagHome), "config", "genesis.json"))
84+
reader, err := os.Open(filepath.Join(home, "config", "genesis.json"))
7885
if err != nil {
7986
panic(err)
8087
}

server/v2/commands.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ func createStartCommand[T transaction.Tx](
112112
return err
113113
}
114114

115-
if err := server.Init(newApp(l, v), v, l); err != nil {
115+
if err := server.Init(newApp(l, v), v.AllSettings(), l); err != nil {
116116
return err
117117
}
118118

server/v2/config.go

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,16 +39,19 @@ func ReadConfig(configPath string) (*viper.Viper, error) {
3939
return v, nil
4040
}
4141

42-
// UnmarshalSubConfig unmarshals the given subconfig from the viper instance.
43-
// It unmarshals the config, env, flags into the target struct.
44-
// Use this instead of viper.Sub because viper does not unmarshal flags.
45-
func UnmarshalSubConfig(v *viper.Viper, subName string, target any) error {
42+
// UnmarshalSubConfig unmarshals the given (sub) config from the main config (given as a map) into the target.
43+
// If subName is empty, the main config is unmarshaled into the target.
44+
func UnmarshalSubConfig(cfg map[string]any, subName string, target any) error {
4645
var sub any
47-
for k, val := range v.AllSettings() {
48-
if k == subName {
49-
sub = val
50-
break
46+
if subName != "" {
47+
for k, val := range cfg {
48+
if k == subName {
49+
sub = val
50+
break
51+
}
5152
}
53+
} else {
54+
sub = cfg
5255
}
5356

5457
// Create a new decoder with custom decoding options

server/v2/config_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,17 @@ func TestUnmarshalSubConfig(t *testing.T) {
3131

3232
v, err := serverv2.ReadConfig(configPath)
3333
require.NoError(t, err)
34+
cfg := v.AllSettings()
3435

3536
grpcConfig := grpc.DefaultConfig()
36-
err = serverv2.UnmarshalSubConfig(v, "grpc", &grpcConfig)
37+
err = serverv2.UnmarshalSubConfig(cfg, "grpc", &grpcConfig)
3738
require.NoError(t, err)
3839

3940
require.True(t, grpc.DefaultConfig().Enable)
4041
require.False(t, grpcConfig.Enable)
4142

4243
storeConfig := store.Config{}
43-
err = serverv2.UnmarshalSubConfig(v, "store", &storeConfig)
44+
err = serverv2.UnmarshalSubConfig(cfg, "store", &storeConfig)
4445
require.NoError(t, err)
4546
require.Equal(t, *store.DefaultConfig(), storeConfig)
4647
}

server/v2/server.go

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import (
1010
"github.com/pelletier/go-toml/v2"
1111
"github.com/spf13/cobra"
1212
"github.com/spf13/pflag"
13-
"github.com/spf13/viper"
1413
"golang.org/x/sync/errgroup"
1514

1615
"cosmossdk.io/core/transaction"
@@ -23,7 +22,7 @@ type ServerComponent[T transaction.Tx] interface {
2322

2423
Start(context.Context) error
2524
Stop(context.Context) error
26-
Init(AppI[T], *viper.Viper, log.Logger) error
25+
Init(AppI[T], map[string]any, log.Logger) error
2726
}
2827

2928
// HasStartFlags is a server module that has start flags.
@@ -189,25 +188,25 @@ func (s *Server[T]) StartCmdFlags() *pflag.FlagSet {
189188

190189
// Init initializes all server components with the provided application, configuration, and logger.
191190
// It returns an error if any component fails to initialize.
192-
func (s *Server[T]) Init(appI AppI[T], v *viper.Viper, logger log.Logger) error {
193-
cfg := s.config
194-
if v != nil {
195-
if err := UnmarshalSubConfig(v, s.Name(), &cfg); err != nil {
191+
func (s *Server[T]) Init(appI AppI[T], cfg map[string]any, logger log.Logger) error {
192+
serverCfg := s.config
193+
if len(cfg) > 0 {
194+
if err := UnmarshalSubConfig(cfg, s.Name(), &serverCfg); err != nil {
196195
return fmt.Errorf("failed to unmarshal config: %w", err)
197196
}
198197
}
199198

200199
var components []ServerComponent[T]
201200
for _, mod := range s.components {
202201
mod := mod
203-
if err := mod.Init(appI, v, logger); err != nil {
202+
if err := mod.Init(appI, cfg, logger); err != nil {
204203
return err
205204
}
206205

207206
components = append(components, mod)
208207
}
209208

210-
s.config = cfg
209+
s.config = serverCfg
211210
s.components = components
212211
return nil
213212
}

server/v2/server_mock_test.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ import (
55
"fmt"
66
"math/rand"
77

8-
"github.com/spf13/viper"
9-
108
"cosmossdk.io/core/transaction"
119
"cosmossdk.io/log"
1210
serverv2 "cosmossdk.io/server/v2"
@@ -33,7 +31,7 @@ func (s *mockServer) Name() string {
3331
return s.name
3432
}
3533

36-
func (s *mockServer) Init(appI serverv2.AppI[transaction.Tx], v *viper.Viper, logger log.Logger) error {
34+
func (s *mockServer) Init(appI serverv2.AppI[transaction.Tx], cfg map[string]any, logger log.Logger) error {
3735
return nil
3836
}
3937

0 commit comments

Comments
 (0)