From d5ebc2af9e82263bd9cbc4eb4e21e9529fc0114c Mon Sep 17 00:00:00 2001 From: DanB Date: Wed, 27 Mar 2019 17:05:52 +0100 Subject: [PATCH] CacheS - close precached channels --- cmd/cgr-engine/cgr-engine.go | 6 +++--- engine/caches.go | 29 ++++++++++++++++------------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/cmd/cgr-engine/cgr-engine.go b/cmd/cgr-engine/cgr-engine.go index 17f162475..a565c5cce 100644 --- a/cmd/cgr-engine/cgr-engine.go +++ b/cmd/cgr-engine/cgr-engine.go @@ -1056,8 +1056,8 @@ func startRpc(server *utils.Server, internalRaterChan, internalCdrSChan, internalRsChan, internalStatSChan, internalAttrSChan, internalChargerSChan, internalThdSChan, internalSuplSChan, internalSMGChan, internalAnalyzerSChan chan rpcclient.RpcClientConnection, - internalDispatcherSChan chan *dispatchers.DispatcherService, exitChan chan bool, - internalCacheSChan chan rpcclient.RpcClientConnection) { + internalDispatcherSChan chan *dispatchers.DispatcherService, + exitChan chan bool) { select { // Any of the rpc methods will unlock listening to rpc requests case resp := <-internalRaterChan: internalRaterChan <- resp @@ -1486,7 +1486,7 @@ func main() { internalRsChan, internalStatSChan, internalAttributeSChan, internalChargerSChan, internalThresholdSChan, internalSupplierSChan, internalSMGChan, internalAnalyzerSChan, - internalDispatcherSChan, exitChan, internalCacheSChan) + internalDispatcherSChan, exitChan) <-exitChan if *cpuProfDir != "" { // wait to end cpuProfiling diff --git a/engine/caches.go b/engine/caches.go index 9e941fc4f..95ed6f00f 100644 --- a/engine/caches.go +++ b/engine/caches.go @@ -112,21 +112,24 @@ func (chS *CacheS) Precache() (err error) { if !precachedPartitions.HasKey(cacheID) { continue } - if cacheCfg.Precache { - wg.Add(1) - go func() { - errCache := chS.dm.CacheDataFromDB( - utils.CacheInstanceToPrefix[cacheID], nil, - false) - if errCache != nil { - errChan <- errCache - } - close(chS.pcItems[cacheID]) - wg.Done() - }() + if !cacheCfg.Precache { + close(chS.pcItems[cacheID]) // no need of precache + continue } + wg.Add(1) + go func(cacheID string) { + errCache := chS.dm.CacheDataFromDB( + utils.CacheInstanceToPrefix[cacheID], nil, + false) + if errCache != nil { + errChan <- errCache + } + close(chS.pcItems[cacheID]) + wg.Done() + }(cacheID) } - go func() { // report wg.Wait on doneChan + time.Sleep(1) // switch context + go func() { // report wg.Wait on doneChan wg.Wait() close(doneChan) }()