Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZeger-Jan van de Weg <git@zjvandeweg.nl>2019-03-04 12:46:28 +0300
committerZeger-Jan van de Weg <git@zjvandeweg.nl>2019-03-05 11:10:43 +0300
commit77fee8f6cf539ceec5389a6322dbd9ade8f8676b (patch)
tree46a3e43ee7fcbb0e1b2e29db035ec4ffe9dcd49b
parent412148b34485702db63a4b365b3f896b421c5a90 (diff)
Fix undefined logger panicing
An oversight made the situation possible where the logger had to log a message while the logger wasn't defined yet. This happened in a case where no config file was passed for example. By defining a the default logger this panic doesn't occur anymore. The configuration options for the logger aren't set yet, so the output is different than what users might expect, but it's better than a panic.
-rw-r--r--changelogs/unreleased/zj-start-without-config.yml5
-rw-r--r--cmd/praefect/main.go36
-rw-r--r--cmd/praefect/main_test.go13
3 files changed, 44 insertions, 10 deletions
diff --git a/changelogs/unreleased/zj-start-without-config.yml b/changelogs/unreleased/zj-start-without-config.yml
new file mode 100644
index 000000000..4df37ca0a
--- /dev/null
+++ b/changelogs/unreleased/zj-start-without-config.yml
@@ -0,0 +1,5 @@
+---
+title: Fix undefined logger panicing
+merge_request: 1114
+author:
+type: fixed
diff --git a/cmd/praefect/main.go b/cmd/praefect/main.go
index 6d4189e17..23e5aa89e 100644
--- a/cmd/praefect/main.go
+++ b/cmd/praefect/main.go
@@ -2,6 +2,7 @@ package main
import (
"context"
+ "errors"
"flag"
"fmt"
"net"
@@ -18,33 +19,48 @@ import (
var (
flagConfig = flag.String("config", "", "Location for the config.toml")
- logger *logrus.Logger
+ logger = logrus.New()
+
+ errNoConfigFile = errors.New("the config flag must be passed")
)
func main() {
flag.Parse()
- conf, err := config.FromFile(*flagConfig)
+ conf, err := configure()
if err != nil {
- logger.Fatalf("%s", err)
+ logger.Fatal(err)
}
- if err := conf.Validate(); err != nil {
+ l, err := net.Listen("tcp", conf.ListenAddr)
+ if err != nil {
logger.Fatalf("%s", err)
}
- logger := conf.ConfigureLogger()
+ logger.WithField("address", conf.ListenAddr).Info("listening at tcp address")
+ logger.Fatalf("%v", run(l, conf))
+}
- tracing.Initialize(tracing.WithServiceName("praefect"))
+func configure() (config.Config, error) {
+ var conf config.Config
- l, err := net.Listen("tcp", conf.ListenAddr)
+ if *flagConfig == "" {
+ return conf, errNoConfigFile
+ }
+
+ conf, err := config.FromFile(*flagConfig)
if err != nil {
- logger.Fatalf("%s", err)
+ return conf, fmt.Errorf("error reading config file: %v", err)
}
- logger.WithField("address", conf.ListenAddr).Info("listening at tcp address")
+ if err := conf.Validate(); err != nil {
+ return conf, err
+ }
- logger.Fatalf("%v", run(l, conf))
+ logger = conf.ConfigureLogger()
+ tracing.Initialize(tracing.WithServiceName("praefect"))
+
+ return conf, nil
}
func run(l net.Listener, conf config.Config) error {
diff --git a/cmd/praefect/main_test.go b/cmd/praefect/main_test.go
new file mode 100644
index 000000000..65d16a86c
--- /dev/null
+++ b/cmd/praefect/main_test.go
@@ -0,0 +1,13 @@
+package main
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestNoConfigFlag(t *testing.T) {
+ _, err := configure()
+
+ assert.Equal(t, err, errNoConfigFile)
+}