Fix goroutine leak in throttler logic.
This commit is contained in:
parent
b6af61fa6e
commit
4cc17e112f
1 changed files with 8 additions and 6 deletions
|
@ -66,6 +66,7 @@ type Server struct {
|
||||||
stopChan chan bool
|
stopChan chan bool
|
||||||
providers []provider.Provider
|
providers []provider.Provider
|
||||||
currentConfigurations safe.Safe
|
currentConfigurations safe.Safe
|
||||||
|
providerConfigUpdateMap map[string]chan types.ConfigMessage
|
||||||
globalConfiguration configuration.GlobalConfiguration
|
globalConfiguration configuration.GlobalConfiguration
|
||||||
accessLoggerMiddleware *accesslog.LogHandler
|
accessLoggerMiddleware *accesslog.LogHandler
|
||||||
routinesPool *safe.Pool
|
routinesPool *safe.Pool
|
||||||
|
@ -105,6 +106,7 @@ func NewServer(globalConfiguration configuration.GlobalConfiguration) *Server {
|
||||||
server.configureSignals()
|
server.configureSignals()
|
||||||
currentConfigurations := make(types.Configurations)
|
currentConfigurations := make(types.Configurations)
|
||||||
server.currentConfigurations.Set(currentConfigurations)
|
server.currentConfigurations.Set(currentConfigurations)
|
||||||
|
server.providerConfigUpdateMap = make(map[string]chan types.ConfigMessage)
|
||||||
server.globalConfiguration = globalConfiguration
|
server.globalConfiguration = globalConfiguration
|
||||||
if server.globalConfiguration.API != nil {
|
if server.globalConfiguration.API != nil {
|
||||||
server.globalConfiguration.API.CurrentConfigurations = &server.currentConfigurations
|
server.globalConfiguration.API.CurrentConfigurations = &server.currentConfigurations
|
||||||
|
@ -350,7 +352,6 @@ func (s *Server) listenProviders(stop chan bool) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) preLoadConfiguration(configMsg types.ConfigMessage) {
|
func (s *Server) preLoadConfiguration(configMsg types.ConfigMessage) {
|
||||||
providerConfigUpdateMap := map[string]chan types.ConfigMessage{}
|
|
||||||
providersThrottleDuration := time.Duration(s.globalConfiguration.ProvidersThrottleDuration)
|
providersThrottleDuration := time.Duration(s.globalConfiguration.ProvidersThrottleDuration)
|
||||||
s.defaultConfigurationValues(configMsg.Configuration)
|
s.defaultConfigurationValues(configMsg.Configuration)
|
||||||
currentConfigurations := s.currentConfigurations.Get().(types.Configurations)
|
currentConfigurations := s.currentConfigurations.Get().(types.Configurations)
|
||||||
|
@ -361,14 +362,15 @@ func (s *Server) preLoadConfiguration(configMsg types.ConfigMessage) {
|
||||||
} else if reflect.DeepEqual(currentConfigurations[configMsg.ProviderName], configMsg.Configuration) {
|
} else if reflect.DeepEqual(currentConfigurations[configMsg.ProviderName], configMsg.Configuration) {
|
||||||
log.Infof("Skipping same configuration for provider %s", configMsg.ProviderName)
|
log.Infof("Skipping same configuration for provider %s", configMsg.ProviderName)
|
||||||
} else {
|
} else {
|
||||||
if _, ok := providerConfigUpdateMap[configMsg.ProviderName]; !ok {
|
providerConfigUpdateCh, ok := s.providerConfigUpdateMap[configMsg.ProviderName]
|
||||||
providerConfigUpdate := make(chan types.ConfigMessage)
|
if !ok {
|
||||||
providerConfigUpdateMap[configMsg.ProviderName] = providerConfigUpdate
|
providerConfigUpdateCh = make(chan types.ConfigMessage)
|
||||||
|
s.providerConfigUpdateMap[configMsg.ProviderName] = providerConfigUpdateCh
|
||||||
s.routinesPool.Go(func(stop chan bool) {
|
s.routinesPool.Go(func(stop chan bool) {
|
||||||
throttleProviderConfigReload(providersThrottleDuration, s.configurationValidatedChan, providerConfigUpdate, stop)
|
throttleProviderConfigReload(providersThrottleDuration, s.configurationValidatedChan, providerConfigUpdateCh, stop)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
providerConfigUpdateMap[configMsg.ProviderName] <- configMsg
|
providerConfigUpdateCh <- configMsg
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue