From ed2b45d8b0b6d5d9dfb7bbffc4de4c319b5b544f Mon Sep 17 00:00:00 2001 From: TeoV Date: Tue, 25 Sep 2018 03:23:51 -0400 Subject: [PATCH] Clarify cacheRead/cacheWrite for stats --- engine/datamanager.go | 14 ++++++++------ engine/datamanager_it_test.go | 6 +++--- engine/onstor_it_test.go | 14 +++++++------- engine/stats.go | 6 +++--- migrator/stats.go | 2 +- migrator/stats_it_test.go | 4 ++-- 6 files changed, 24 insertions(+), 22 deletions(-) diff --git a/engine/datamanager.go b/engine/datamanager.go index b58a0af88..95fd53baa 100644 --- a/engine/datamanager.go +++ b/engine/datamanager.go @@ -224,7 +224,7 @@ func (dm *DataManager) CacheDataFromDB(prfx string, ids []string, mustBeCached b _, err = dm.GetStatQueueProfile(tntID.Tenant, tntID.ID, false, true, utils.NonTransactional) case utils.StatQueuePrefix: tntID := utils.NewTenantID(dataID) - _, err = dm.GetStatQueue(tntID.Tenant, tntID.ID, true, utils.NonTransactional) + _, err = dm.GetStatQueue(tntID.Tenant, tntID.ID, false, true, utils.NonTransactional) case utils.TimingsPrefix: _, err = dm.GetTiming(dataID, true, utils.NonTransactional) case utils.ThresholdProfilePrefix: @@ -259,9 +259,9 @@ func (dm *DataManager) CacheDataFromDB(prfx string, ids []string, mustBeCached b // GetStatQueue retrieves a StatQueue from dataDB // handles caching and deserialization of metrics func (dm *DataManager) GetStatQueue(tenant, id string, - skipCache bool, transactionID string) (sq *StatQueue, err error) { + cacheRead, cacheWrite bool, transactionID string) (sq *StatQueue, err error) { tntID := utils.ConcatenatedKey(tenant, id) - if !skipCache { + if cacheRead { if x, ok := Cache.Get(utils.CacheStatQueues, tntID); ok { if x == nil { return nil, utils.ErrNotFound @@ -271,7 +271,7 @@ func (dm *DataManager) GetStatQueue(tenant, id string, } ssq, err := dm.dataDB.GetStoredStatQueueDrv(tenant, id) if err != nil { - if err == utils.ErrNotFound { + if err == utils.ErrNotFound && cacheWrite { Cache.Set(utils.CacheStatQueues, tntID, nil, nil, cacheCommit(transactionID), transactionID) } @@ -280,8 +280,10 @@ func (dm *DataManager) GetStatQueue(tenant, id string, if sq, err = ssq.AsStatQueue(dm.dataDB.Marshaler()); err != nil { return nil, err } - Cache.Set(utils.CacheStatQueues, tntID, sq, nil, - cacheCommit(transactionID), transactionID) + if cacheWrite { + Cache.Set(utils.CacheStatQueues, tntID, sq, nil, + cacheCommit(transactionID), transactionID) + } return } diff --git a/engine/datamanager_it_test.go b/engine/datamanager_it_test.go index 3caad4ad1..f3c3298cf 100644 --- a/engine/datamanager_it_test.go +++ b/engine/datamanager_it_test.go @@ -99,7 +99,7 @@ func testDMitCRUDStatQueue(t *testing.T) { }, }, } - if _, rcvErr := dm2.GetStatQueue(sq.Tenant, sq.ID, false, ""); rcvErr != utils.ErrNotFound { + if _, rcvErr := dm2.GetStatQueue(sq.Tenant, sq.ID, true, false, ""); rcvErr != utils.ErrNotFound { t.Error(rcvErr) } if _, ok := Cache.Get(utils.CacheStatQueues, sq.TenantID()); ok != false { @@ -111,7 +111,7 @@ func testDMitCRUDStatQueue(t *testing.T) { if _, ok := Cache.Get(utils.CacheStatQueues, sq.TenantID()); ok != false { t.Error("should not be in cache") } - if rcv, err := dm2.GetStatQueue(sq.Tenant, sq.ID, false, ""); err != nil { + if rcv, err := dm2.GetStatQueue(sq.Tenant, sq.ID, true, false, ""); err != nil { t.Error(err) } else if !reflect.DeepEqual(sq, rcv) { t.Errorf("expecting: %v, received: %v", sq, rcv) @@ -125,7 +125,7 @@ func testDMitCRUDStatQueue(t *testing.T) { if _, ok := Cache.Get(utils.CacheStatQueues, sq.TenantID()); ok != false { t.Error("should not be in cache") } - if _, rcvErr := dm2.GetStatQueue(sq.Tenant, sq.ID, false, ""); rcvErr != utils.ErrNotFound { + if _, rcvErr := dm2.GetStatQueue(sq.Tenant, sq.ID, true, false, ""); rcvErr != utils.ErrNotFound { t.Error(rcvErr) } } diff --git a/engine/onstor_it_test.go b/engine/onstor_it_test.go index 83fe67230..4da5cbab4 100644 --- a/engine/onstor_it_test.go +++ b/engine/onstor_it_test.go @@ -2029,7 +2029,7 @@ func testOnStorITStatQueue(t *testing.T) { }, } if _, rcvErr := onStor.GetStatQueue(sq.Tenant, sq.ID, - false, utils.NonTransactional); rcvErr != utils.ErrNotFound { + true, false, utils.NonTransactional); rcvErr != utils.ErrNotFound { t.Error(rcvErr) } if err := onStor.SetStatQueue(sq); err != nil { @@ -2037,14 +2037,14 @@ func testOnStorITStatQueue(t *testing.T) { } //get from cache if rcv, err := onStor.GetStatQueue(sq.Tenant, - sq.ID, false, utils.NonTransactional); err != nil { + sq.ID, true, false, utils.NonTransactional); err != nil { t.Error(err) } else if !reflect.DeepEqual(sq, rcv) { t.Errorf("Expecting: %v, received: %v", sq, rcv) } //get from database if rcv, err := onStor.GetStatQueue(sq.Tenant, - sq.ID, true, utils.NonTransactional); err != nil { + sq.ID, false, false, utils.NonTransactional); err != nil { t.Error(err) } else if !reflect.DeepEqual(sq, rcv) { t.Errorf("Expecting: %v, received: %v", sq, rcv) @@ -2073,14 +2073,14 @@ func testOnStorITStatQueue(t *testing.T) { time.Sleep(sleepDelay) //get from cache if rcv, err := onStor.GetStatQueue(sq.Tenant, - sq.ID, false, utils.NonTransactional); err != nil { + sq.ID, true, false, utils.NonTransactional); err != nil { t.Error(err) } else if !reflect.DeepEqual(sq, rcv) { t.Errorf("Expecting: %v, received: %v", sq, rcv) } //get from database if rcv, err := onStor.GetStatQueue(sq.Tenant, - sq.ID, true, utils.NonTransactional); err != nil { + sq.ID, false, false, utils.NonTransactional); err != nil { t.Error(err) } else if !reflect.DeepEqual(sq, rcv) { t.Errorf("Expecting: %v, received: %v", sq, rcv) @@ -2091,12 +2091,12 @@ func testOnStorITStatQueue(t *testing.T) { } //check cache if removed if _, rcvErr := onStor.GetStatQueue(sq.Tenant, - sq.ID, false, utils.NonTransactional); rcvErr != utils.ErrNotFound { + sq.ID, true, false, utils.NonTransactional); rcvErr != utils.ErrNotFound { t.Error(rcvErr) } //check database if removed if _, rcvErr := onStor.GetStatQueue(sq.Tenant, - sq.ID, true, utils.NonTransactional); rcvErr != utils.ErrNotFound { + sq.ID, false, false, utils.NonTransactional); rcvErr != utils.ErrNotFound { t.Error(rcvErr) } } diff --git a/engine/stats.go b/engine/stats.go index 785d32480..a83a17acf 100644 --- a/engine/stats.go +++ b/engine/stats.go @@ -178,7 +178,7 @@ func (sS *StatService) matchingStatQueuesForEvent(args *StatsArgsProcessEvent) ( } lkID := utils.StatQueuePrefix + utils.ConcatenatedKey(sqPrfl.Tenant, sqPrfl.ID) guardian.Guardian.GuardIDs(config.CgrConfig().LockingTimeout, lkID) - s, err := sS.dm.GetStatQueue(sqPrfl.Tenant, sqPrfl.ID, false, "") + s, err := sS.dm.GetStatQueue(sqPrfl.Tenant, sqPrfl.ID, true, true, "") guardian.Guardian.UnguardIDs(lkID) if err != nil { return nil, err @@ -336,7 +336,7 @@ func (sS *StatService) V1GetQueueStringMetrics(args *utils.TenantID, reply *map[ lkID := utils.StatQueuePrefix + args.TenantID() guardian.Guardian.GuardIDs(config.CgrConfig().LockingTimeout, lkID) defer guardian.Guardian.UnguardIDs(lkID) - sq, err := sS.dm.GetStatQueue(args.Tenant, args.ID, false, "") + sq, err := sS.dm.GetStatQueue(args.Tenant, args.ID, true, true, "") if err != nil { if err != utils.ErrNotFound { err = utils.NewErrServerError(err) @@ -359,7 +359,7 @@ func (sS *StatService) V1GetQueueFloatMetrics(args *utils.TenantID, reply *map[s lkID := utils.StatQueuePrefix + args.TenantID() guardian.Guardian.GuardIDs(config.CgrConfig().LockingTimeout, lkID) defer guardian.Guardian.UnguardIDs(lkID) - sq, err := sS.dm.GetStatQueue(args.Tenant, args.ID, false, "") + sq, err := sS.dm.GetStatQueue(args.Tenant, args.ID, true, true, "") if err != nil { if err != utils.ErrNotFound { err = utils.NewErrServerError(err) diff --git a/migrator/stats.go b/migrator/stats.go index f7e92561b..db07d4384 100644 --- a/migrator/stats.go +++ b/migrator/stats.go @@ -69,7 +69,7 @@ func (m *Migrator) migrateCurrentStats() (err error) { } for _, id := range ids { idg := strings.TrimPrefix(id, utils.StatQueuePrefix+tenant+":") - sgs, err := m.dmIN.DataManager().GetStatQueue(tenant, idg, true, utils.NonTransactional) + sgs, err := m.dmIN.DataManager().GetStatQueue(tenant, idg, false, false, utils.NonTransactional) if err != nil { return err } diff --git a/migrator/stats_it_test.go b/migrator/stats_it_test.go index 34b39a962..56a4d003e 100755 --- a/migrator/stats_it_test.go +++ b/migrator/stats_it_test.go @@ -268,7 +268,7 @@ func testStsITMigrateAndMove(t *testing.T) { t.Errorf("Expecting: %+v, received: %+v", len(filter.Rules), len(result1.Rules)) } - result2, err := stsMigrator.dmOut.DataManager().GetStatQueue("cgrates.org", sq.ID, true, utils.NonTransactional) + result2, err := stsMigrator.dmOut.DataManager().GetStatQueue("cgrates.org", sq.ID, false, false, utils.NonTransactional) if err != nil { t.Error("Error when getting Stats ", err.Error()) } @@ -296,7 +296,7 @@ func testStsITMigrateAndMove(t *testing.T) { if err != nil { t.Error("Error when getting Stats ", err.Error()) } - result1, err := stsMigrator.dmOut.DataManager().GetStatQueue(sq.Tenant, sq.ID, true, utils.NonTransactional) + result1, err := stsMigrator.dmOut.DataManager().GetStatQueue(sq.Tenant, sq.ID, false, false, utils.NonTransactional) if err != nil { t.Error("Error when getting Stats ", err.Error()) }