From ac40017bb71fdd20ab761edc8b8795c1c77905ad Mon Sep 17 00:00:00 2001 From: JW Song Date: Wed, 15 Jun 2022 10:51:08 +0900 Subject: [PATCH 1/2] automatic reload on configuration file change --- go.mod | 3 ++- go.sum | 2 ++ main.go | 21 +++++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 766e539a..6f30d74d 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,9 @@ go 1.17 require ( github.com/OneOfOne/xxhash v1.2.8 github.com/Shopify/sarama v1.31.1 + github.com/fsnotify/fsnotify v1.5.1 github.com/julienschmidt/httprouter v1.3.0 + github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 github.com/karrick/goswarm v1.10.0 github.com/pborman/uuid v1.2.1 github.com/pkg/errors v0.9.1 @@ -26,7 +28,6 @@ require ( github.com/eapache/go-resiliency v1.2.0 // indirect github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 // indirect github.com/eapache/queue v1.1.0 // indirect - github.com/fsnotify/fsnotify v1.5.1 // indirect github.com/golang/protobuf v1.5.2 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/uuid v1.3.0 // indirect diff --git a/go.sum b/go.sum index be32d200..c194a433 100644 --- a/go.sum +++ b/go.sum @@ -287,6 +287,8 @@ github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/X github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 h1:iQTw/8FWTuc7uiaSepXwyf3o52HaUYcV+Tu66S3F5GA= +github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8= github.com/karrick/goswarm v1.10.0 h1:hGUt7r6O3bR02whvkW/E4rU6Ei7MekGGlTD5zqAYSHo= github.com/karrick/goswarm v1.10.0/go.mod h1:wqange6Y/RHXs23gBc4nRXPent8RaiFyfl2+otwXj8U= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= diff --git a/main.go b/main.go index ee167bb4..30c4d5b2 100644 --- a/main.go +++ b/main.go @@ -45,6 +45,9 @@ import ( "github.com/spf13/viper" "github.com/linkedin/Burrow/core" + + "github.com/kardianos/osext" + "github.com/fsnotify/fsnotify" ) // exitCode wraps a return value for the application @@ -85,6 +88,24 @@ func main() { panic(exitCode{1}) } + // auto reload on config change + viper.WatchConfig() + viper.OnConfigChange(func(e fsnotify.Event) { + fmt.Fprintln(os.Stderr, "Config file changed: ", e.Name) + file, err := osext.Executable() + if err != nil { + fmt.Fprintln(os.Stderr, "Failed retrieving executable name:", err.Error()) + fmt.Fprintln(os.Stderr, "Manual restart is needed") + return + } + err = syscall.Exec(file, os.Args, os.Environ()) + if err != nil { + fmt.Fprintln(os.Stderr, "Failed restarting:", err.Error()) + fmt.Fprintln(os.Stderr, "Manual restart is needed") + return + } + }) + // setup viper to be able to read env variables with a configured prefix viper.SetDefault("general.env-var-prefix", "burrow") envPrefix := viper.GetString("general.env-var-prefix") From c5a9c16afc4071e61e827badc06a8cab11bfef81 Mon Sep 17 00:00:00 2001 From: JW Song Date: Wed, 15 Jun 2022 11:16:24 +0900 Subject: [PATCH 2/2] fix lint --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.go b/main.go index 30c4d5b2..65111922 100644 --- a/main.go +++ b/main.go @@ -46,8 +46,8 @@ import ( "github.com/linkedin/Burrow/core" - "github.com/kardianos/osext" "github.com/fsnotify/fsnotify" + "github.com/kardianos/osext" ) // exitCode wraps a return value for the application