From 456724cef299d6528cf707e7ad4c2e03d42c72a5 Mon Sep 17 00:00:00 2001 From: James Dietz Date: Tue, 20 Nov 2018 09:43:45 +0000 Subject: [PATCH] Add configurable graceful shutdown timeout Fix circular dep by pushing plugin config from registry to config pkg Move plugin config push to more appropriate location Fix negative WaitGroup counter Move plugin config push to more appropriate location --- config.example.json | 4 +++- config/config.go | 11 +++++++---- config/types.go | 2 ++ registry/manager.go | 9 ++++++--- registry/registry.go | 3 +++ 5 files changed, 21 insertions(+), 8 deletions(-) diff --git a/config.example.json b/config.example.json index 025ff7a..7fa2aa1 100644 --- a/config.example.json +++ b/config.example.json @@ -2,5 +2,7 @@ "plugin_directory": "plugins", "config_directory": "config", - "default_store": "Flatfile-JSON" + "default_store": "Flatfile-JSON", + + "graceful_shutdown_timeout": 30 } \ No newline at end of file diff --git a/config/config.go b/config/config.go index 836d108..6934a01 100644 --- a/config/config.go +++ b/config/config.go @@ -3,12 +3,13 @@ package config import ( "encoding/json" "fmt" - "github.com/StratoAPI/Core/registry" + "github.com/StratoAPI/Interface/plugins" "io/ioutil" "os" ) var config Config +var pluginConfigs = make(map[string]*plugins.Config) func InitializeConfig() { configFile, err := os.Open("config.json") @@ -30,10 +31,12 @@ func InitializeConfig() { fmt.Println("Configs initialized") } -func InitializePluginConfigs() { - configs := registry.GetRegistryInternal().GetConfigs() +func PushPluginConfigs(configs map[string]*plugins.Config) { + pluginConfigs = configs +} - for name, conf := range configs { +func InitializePluginConfigs() { + for name, conf := range pluginConfigs { configFile := config.ConfigDirectory + "/" + name + ".json" structure := (*conf).CreateStructure() if _, err := os.Stat(configFile); os.IsNotExist(err) { diff --git a/config/types.go b/config/types.go index ea299f9..c7f796b 100644 --- a/config/types.go +++ b/config/types.go @@ -5,4 +5,6 @@ type Config struct { ConfigDirectory string `json:"config_directory"` DefaultStore string `json:"default_store"` + + GracefulShutdownTimeout int `json:"graceful_shutdown_timeout"` } diff --git a/registry/manager.go b/registry/manager.go index fc8f5a4..26bc5a3 100644 --- a/registry/manager.go +++ b/registry/manager.go @@ -6,6 +6,8 @@ import ( "os/signal" "sync" "time" + + "github.com/StratoAPI/Core/config" ) var storageWaitGroup sync.WaitGroup @@ -94,7 +96,7 @@ func InitializeFilters() { } func StartFilters() { - filtersWaitGroup.Add(len(coreRegistry.facades)) + filtersWaitGroup.Add(len(coreRegistry.filters)) for _, filter := range coreRegistry.filters { go func() { @@ -178,9 +180,10 @@ func WaitForGoroutines() { StopMiddlewares() }() + timeout := config.Get().GracefulShutdownTimeout + select { - // TODO Make time configurable - case <-time.After(30 * time.Second): + case <-time.After(time.Duration(timeout) * time.Second): panic("Graceful shutdown failed!") case <-done: fmt.Println("Server shut down") diff --git a/registry/registry.go b/registry/registry.go index 71e6775..3c33a37 100644 --- a/registry/registry.go +++ b/registry/registry.go @@ -5,6 +5,8 @@ import ( "io/ioutil" "plugin" + "github.com/StratoAPI/Core/config" + "github.com/StratoAPI/Interface/plugins" ) @@ -76,6 +78,7 @@ func InitializePlugins(pluginDirectory string) { for _, v := range loadedPlugins { pluginNames = append(pluginNames, v.Name()) } + config.PushPluginConfigs(coreRegistry.configs) for k := range coreRegistry.facades { facadeNames = append(facadeNames, k)