From 56e8ec9ba67117818658e769087d362273abf9e7 Mon Sep 17 00:00:00 2001 From: Lior Bondarevski Date: Sun, 21 Aug 2022 16:31:43 +0300 Subject: [PATCH 1/2] Proper error when parsing telemetry configuration --- server/config/config.go | 17 ++++++++++++----- server/start.go | 14 ++++++++++++-- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/server/config/config.go b/server/config/config.go index bd0ba7ae58ce..81b5f73e8c3f 100644 --- a/server/config/config.go +++ b/server/config/config.go @@ -287,11 +287,18 @@ func DefaultConfig() *Config { } // GetConfig returns a fully parsed Config object. -func GetConfig(v *viper.Viper) Config { - globalLabelsRaw := v.Get("telemetry.global-labels").([]interface{}) +func GetConfig(v *viper.Viper) (Config, error) { + globalLabelsRaw, ok := v.Get("telemetry.global-labels").([]interface{}) + if !ok { + return *DefaultConfig(), fmt.Errorf("failed to parse global-labels config") + } + globalLabels := make([][]string, 0, len(globalLabelsRaw)) - for _, glr := range globalLabelsRaw { - labelsRaw := glr.([]interface{}) + for idx, glr := range globalLabelsRaw { + labelsRaw, ok := glr.([]interface{}) + if !ok { + return *DefaultConfig(), fmt.Errorf("failed to parse global label number %d from config", idx) + } if len(labelsRaw) == 2 { globalLabels = append(globalLabels, []string{labelsRaw[0].(string), labelsRaw[1].(string)}) } @@ -356,7 +363,7 @@ func GetConfig(v *viper.Viper) Config { SnapshotInterval: v.GetUint64("state-sync.snapshot-interval"), SnapshotKeepRecent: v.GetUint32("state-sync.snapshot-keep-recent"), }, - } + }, nil } // ValidateBasic returns an error if min-gas-prices field is empty in BaseConfig. Otherwise, it returns nil. diff --git a/server/start.go b/server/start.go index 271904f38ee0..f425420efcda 100644 --- a/server/start.go +++ b/server/start.go @@ -208,7 +208,13 @@ func startStandAlone(ctx *Context, appCreator types.AppCreator) error { } app := appCreator(ctx.Logger, db, traceWriter, ctx.Viper) - _, err = startTelemetry(serverconfig.GetConfig(ctx.Viper)) + + config, err := serverconfig.GetConfig(ctx.Viper) + if err != nil { + return err + } + + _, err = startTelemetry(config) if err != nil { return err } @@ -271,7 +277,11 @@ func startInProcess(ctx *Context, clientCtx client.Context, appCreator types.App return err } - config := serverconfig.GetConfig(ctx.Viper) + config, err := serverconfig.GetConfig(ctx.Viper) + if err != nil { + return err + } + if err := config.ValidateBasic(); err != nil { return err } From cb6cda6a62a770b67d7dbe00b3998fba81f2526c Mon Sep 17 00:00:00 2001 From: Lior Bondarevski Date: Mon, 22 Aug 2022 19:55:26 +0300 Subject: [PATCH 2/2] Get config returns empty config instead of default config --- server/config/config.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/config/config.go b/server/config/config.go index 81b5f73e8c3f..d77aab06f934 100644 --- a/server/config/config.go +++ b/server/config/config.go @@ -290,14 +290,14 @@ func DefaultConfig() *Config { func GetConfig(v *viper.Viper) (Config, error) { globalLabelsRaw, ok := v.Get("telemetry.global-labels").([]interface{}) if !ok { - return *DefaultConfig(), fmt.Errorf("failed to parse global-labels config") + return Config{}, fmt.Errorf("failed to parse global-labels config") } globalLabels := make([][]string, 0, len(globalLabelsRaw)) for idx, glr := range globalLabelsRaw { labelsRaw, ok := glr.([]interface{}) if !ok { - return *DefaultConfig(), fmt.Errorf("failed to parse global label number %d from config", idx) + return Config{}, fmt.Errorf("failed to parse global label number %d from config", idx) } if len(labelsRaw) == 2 { globalLabels = append(globalLabels, []string{labelsRaw[0].(string), labelsRaw[1].(string)})