From a9d591851428cd042aadefd313253c911a3d22e6 Mon Sep 17 00:00:00 2001 From: Radu Ioan Fericean Date: Mon, 29 Jun 2015 13:32:32 +0300 Subject: [PATCH] fixes for cdr stats saving/loading --- engine/stats.go | 2 ++ engine/stats_queue.go | 2 ++ engine/storage_redis.go | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/engine/stats.go b/engine/stats.go index 861d122d8..cb5f84986 100644 --- a/engine/stats.go +++ b/engine/stats.go @@ -73,9 +73,11 @@ func newQueueSaver(id string, saveInterval time.Duration, sq *StatsQueue, adb Ac select { case <-svr.ticker.C: if svr.sq.IsDirty() { + svr.sq.mux.Lock() if err := svr.adb.SetCdrStatsQueue(svr.sq); err != nil { Logger.Err(fmt.Sprintf("Error saving cdr stats queue id %s: %v", id, err)) } + svr.sq.mux.Unlock() } case <-svr.stopper: break diff --git a/engine/stats_queue.go b/engine/stats_queue.go index 56affc338..911532406 100644 --- a/engine/stats_queue.go +++ b/engine/stats_queue.go @@ -85,6 +85,8 @@ func (sq *StatsQueue) UpdateConf(conf *CdrStats) { } func (sq *StatsQueue) Load(saved *StatsQueue) { + sq.mux.Lock() + defer sq.mux.Unlock() sq.Cdrs = saved.Cdrs for key, metric := range saved.Metrics { if _, exists := sq.Metrics[key]; exists { diff --git a/engine/storage_redis.go b/engine/storage_redis.go index 7ab9d9201..a367a1878 100644 --- a/engine/storage_redis.go +++ b/engine/storage_redis.go @@ -677,7 +677,7 @@ func (rs *RedisStorage) SetAccount(ub *Account) (err error) { func (rs *RedisStorage) GetCdrStatsQueue(key string) (sq *StatsQueue, err error) { var values []byte if values, err = rs.db.Get(utils.CDR_STATS_QUEUE_PREFIX + key); err == nil { - sq = &StatsQueue{} + sq = &StatsQueue{Metrics: make(map[string]Metric)} err = rs.ms.Unmarshal(values, sq) }