From fc883ad930d612ccffcd5c20acac06c09d684a3c Mon Sep 17 00:00:00 2001 From: Trial97 Date: Wed, 8 Jan 2020 09:40:10 +0200 Subject: [PATCH] Updated ConfigSv1.ReloadConfigFromJSON --- config/config.go | 24 +++++++++--------------- config/config_it_test.go | 4 ++-- config/config_json.go | 7 +++++++ 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/config/config.go b/config/config.go index 425d7d5a8..02a412313 100755 --- a/config/config.go +++ b/config/config.go @@ -1491,10 +1491,7 @@ func (cfg *CGRConfig) loadConfig(path, section string) (err error) { var loadFuncs []func(*CgrJsonCfg) error loadMap := cfg.getLoadFunctions() if section == utils.EmptyString || section == utils.MetaAll { - for _, sec := range []string{GENERAL_JSN, RPCConnsJsonName, DATADB_JSN, STORDB_JSN, LISTEN_JSN, TlsCfgJson, HTTP_JSN, SCHEDULER_JSN, CACHE_JSN, FilterSjsn, RALS_JSN, - CDRS_JSN, CDRE_JSN, CDRC_JSN, ERsJson, SessionSJson, AsteriskAgentJSN, FreeSWITCHAgentJSN, KamailioAgentJSN, - DA_JSN, RA_JSN, HttpAgentJson, DNSAgentJson, ATTRIBUTE_JSN, ChargerSCfgJson, RESOURCES_JSON, STATS_JSON, THRESHOLDS_JSON, - SupplierSJson, LoaderJson, MAILER_JSN, SURETAX_JSON, CgrLoaderCfgJson, CgrMigratorCfgJson, DispatcherSJson, AnalyzerCfgJson, Apier} { + for _, sec := range sortedCfgSections { cfg.lks[sec].Lock() defer cfg.lks[sec].Unlock() loadFuncs = append(loadFuncs, loadMap[sec]) @@ -1612,10 +1609,7 @@ func (cfg *CGRConfig) loadConfigFromHTTP(urlPaths string, loadFuncs []func(jsnCf func (cfg *CGRConfig) initChanels() { cfg.lks = make(map[string]*sync.RWMutex) cfg.rldChans = make(map[string]chan struct{}) - for _, section := range []string{GENERAL_JSN, RPCConnsJsonName, DATADB_JSN, STORDB_JSN, LISTEN_JSN, TlsCfgJson, HTTP_JSN, SCHEDULER_JSN, CACHE_JSN, FilterSjsn, RALS_JSN, - CDRS_JSN, CDRE_JSN, CDRC_JSN, ERsJson, SessionSJson, AsteriskAgentJSN, FreeSWITCHAgentJSN, KamailioAgentJSN, - DA_JSN, RA_JSN, HttpAgentJson, DNSAgentJson, ATTRIBUTE_JSN, ChargerSCfgJson, RESOURCES_JSON, STATS_JSON, THRESHOLDS_JSON, - SupplierSJson, LoaderJson, MAILER_JSN, SURETAX_JSON, CgrLoaderCfgJson, CgrMigratorCfgJson, DispatcherSJson, AnalyzerCfgJson, Apier} { + for _, section := range sortedCfgSections { cfg.lks[section] = new(sync.RWMutex) cfg.rldChans[section] = make(chan struct{}, 1) } @@ -1676,13 +1670,13 @@ func (cfg *CGRConfig) V1ReloadConfigFromJSON(args *JSONReloadWithArgDispatcher, for _, section := range sections { if subsystemsThatNeedStorDB.Has(section) { needsStorDB = true - cfg.rldChans[STORDB_JSN] <- struct{}{} // reload datadb before + cfg.rldChans[STORDB_JSN] <- struct{}{} // reload stordb before break } } time.Sleep(1) for _, section := range sections { - if needsDataDB && section == DATADB_JSN { + if needsDataDB && section == DATADB_JSN { // already reloaded continue } if needsStorDB && section == STORDB_JSN { @@ -1698,13 +1692,13 @@ func (cfg *CGRConfig) loadConfigFromJSON(rdr io.Reader, sections []string) (err var loadFuncs []func(*CgrJsonCfg) error loadMap := cfg.getLoadFunctions() for _, section := range sections { - if fnct, has := loadMap[section]; !has { + fnct, has := loadMap[section] + if !has { return fmt.Errorf("Invalid section: <%s>", section) - } else { - cfg.lks[section].Lock() - defer cfg.lks[section].Unlock() - loadFuncs = append(loadFuncs, fnct) } + cfg.lks[section].Lock() + defer cfg.lks[section].Unlock() + loadFuncs = append(loadFuncs, fnct) } return cfg.loadConfigFromReader(rdr, loadFuncs) } diff --git a/config/config_it_test.go b/config/config_it_test.go index fad8c0834..b9dddb4b4 100644 --- a/config/config_it_test.go +++ b/config/config_it_test.go @@ -915,7 +915,7 @@ func TestCGRConfigReloadConfigFromJSONSessionS(t *testing.T) { AttrSConns: []string{utils.MetaLocalHost}, CDRsConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCDRs)}, - ReplicationConns: []*RemoteHost{}, + ReplicationConns: []string{}, MaxCallDuration: 3 * time.Hour, SessionIndexes: utils.NewStringMap(), ClientProtocol: 1, @@ -955,7 +955,7 @@ func TestCGRConfigReloadAll(t *testing.T) { AttrSConns: []string{utils.MetaLocalHost}, CDRsConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCDRs)}, - ReplicationConns: []*RemoteHost{}, + ReplicationConns: []string{}, MaxCallDuration: 3 * time.Hour, SessionIndexes: utils.NewStringMap(), ClientProtocol: 1, diff --git a/config/config_json.go b/config/config_json.go index 6126a8d95..e0322cafa 100644 --- a/config/config_json.go +++ b/config/config_json.go @@ -62,6 +62,13 @@ const ( RPCConnsJsonName = "rpc_conns" ) +var ( + sortedCfgSections = []string{GENERAL_JSN, RPCConnsJsonName, DATADB_JSN, STORDB_JSN, LISTEN_JSN, TlsCfgJson, HTTP_JSN, SCHEDULER_JSN, CACHE_JSN, FilterSjsn, RALS_JSN, + CDRS_JSN, CDRE_JSN, CDRC_JSN, ERsJson, SessionSJson, AsteriskAgentJSN, FreeSWITCHAgentJSN, KamailioAgentJSN, + DA_JSN, RA_JSN, HttpAgentJson, DNSAgentJson, ATTRIBUTE_JSN, ChargerSCfgJson, RESOURCES_JSON, STATS_JSON, THRESHOLDS_JSON, + SupplierSJson, LoaderJson, MAILER_JSN, SURETAX_JSON, CgrLoaderCfgJson, CgrMigratorCfgJson, DispatcherSJson, AnalyzerCfgJson, Apier} +) + // Loads the json config out of io.Reader, eg other sources than file, maybe over http func NewCgrJsonCfgFromBytes(buf []byte) (cgrJsonCfg *CgrJsonCfg, err error) { cgrJsonCfg = new(CgrJsonCfg)