diff --git a/engine/datamanager.go b/engine/datamanager.go index 95fd53baa..e7d0d6b21 100644 --- a/engine/datamanager.go +++ b/engine/datamanager.go @@ -218,7 +218,7 @@ func (dm *DataManager) CacheDataFromDB(prfx string, ids []string, mustBeCached b _, err = dm.GetResourceProfile(tntID.Tenant, tntID.ID, false, true, utils.NonTransactional) case utils.ResourcesPrefix: tntID := utils.NewTenantID(dataID) - _, err = dm.GetResource(tntID.Tenant, tntID.ID, true, utils.NonTransactional) + _, err = dm.GetResource(tntID.Tenant, tntID.ID, false, true, utils.NonTransactional) case utils.StatQueueProfilePrefix: tntID := utils.NewTenantID(dataID) _, err = dm.GetStatQueueProfile(tntID.Tenant, tntID.ID, false, true, utils.NonTransactional) @@ -589,10 +589,10 @@ func (dm *DataManager) RemoveTiming(id, transactionID string) (err error) { return } -func (dm *DataManager) GetResource(tenant, id string, skipCache bool, +func (dm *DataManager) GetResource(tenant, id string, cacheRead, cacheWrite bool, transactionID string) (rs *Resource, err error) { tntID := utils.ConcatenatedKey(tenant, id) - if !skipCache { + if cacheRead { if x, ok := Cache.Get(utils.CacheResources, tntID); ok { if x == nil { return nil, utils.ErrNotFound @@ -602,14 +602,16 @@ func (dm *DataManager) GetResource(tenant, id string, skipCache bool, } rs, err = dm.dataDB.GetResourceDrv(tenant, id) if err != nil { - if err == utils.ErrNotFound { + if err == utils.ErrNotFound && cacheWrite { Cache.Set(utils.CacheResources, tntID, nil, nil, cacheCommit(transactionID), transactionID) } return nil, err } - Cache.Set(utils.CacheResources, tntID, rs, nil, - cacheCommit(transactionID), transactionID) + if cacheWrite { + Cache.Set(utils.CacheResources, tntID, rs, nil, + cacheCommit(transactionID), transactionID) + } return } diff --git a/engine/onstor_it_test.go b/engine/onstor_it_test.go index 4da5cbab4..73eb80cbf 100644 --- a/engine/onstor_it_test.go +++ b/engine/onstor_it_test.go @@ -1727,7 +1727,7 @@ func testOnStorITResource(t *testing.T) { TTLIdx: []string{"RU1"}, } if _, rcvErr := onStor.GetResource(res.Tenant, res.ID, - false, utils.NonTransactional); rcvErr != nil && rcvErr != utils.ErrNotFound { + true, false, utils.NonTransactional); rcvErr != nil && rcvErr != utils.ErrNotFound { t.Error(rcvErr) } if err := onStor.SetResource(res); err != nil { @@ -1735,14 +1735,14 @@ func testOnStorITResource(t *testing.T) { } //get from cache if rcv, err := onStor.GetResource("cgrates.org", "RL1", - false, utils.NonTransactional); err != nil { + true, false, utils.NonTransactional); err != nil { t.Error(err) } else if !(reflect.DeepEqual(res, rcv)) { t.Errorf("Expecting: %v, received: %v", res, rcv) } //get from database if rcv, err := onStor.GetResource("cgrates.org", "RL1", - true, utils.NonTransactional); err != nil { + false, false, utils.NonTransactional); err != nil { t.Error(err) } else if !(reflect.DeepEqual(res, rcv)) { t.Errorf("Expecting: %v, received: %v", res, rcv) @@ -1761,14 +1761,14 @@ func testOnStorITResource(t *testing.T) { time.Sleep(sleepDelay) //get from cache if rcv, err := onStor.GetResource("cgrates.org", "RL1", - false, utils.NonTransactional); err != nil { + true, false, utils.NonTransactional); err != nil { t.Error(err) } else if !(reflect.DeepEqual(res, rcv)) { t.Errorf("Expecting: %v, received: %v", res, rcv) } //get from database if rcv, err := onStor.GetResource("cgrates.org", "RL1", - true, utils.NonTransactional); err != nil { + false, false, utils.NonTransactional); err != nil { t.Error(err) } else if !(reflect.DeepEqual(res, rcv)) { t.Errorf("Expecting: %v, received: %v", res, rcv) @@ -1778,12 +1778,12 @@ func testOnStorITResource(t *testing.T) { } //check cache if removed if _, rcvErr := onStor.GetResource(res.Tenant, res.ID, - false, utils.NonTransactional); rcvErr != utils.ErrNotFound { + true, false, utils.NonTransactional); rcvErr != utils.ErrNotFound { t.Error(rcvErr) } //check database if removed if _, rcvErr := onStor.GetResource(res.Tenant, res.ID, - true, utils.NonTransactional); rcvErr != utils.ErrNotFound { + false, false, utils.NonTransactional); rcvErr != utils.ErrNotFound { t.Error(rcvErr) } } diff --git a/engine/resources.go b/engine/resources.go index 5e537e848..5999f4f92 100644 --- a/engine/resources.go +++ b/engine/resources.go @@ -420,7 +420,7 @@ func (rS *ResourceService) cachedResourcesForEvent(evUUID string) (rs Resources) guardian.Guardian.GuardIDs(config.CgrConfig().LockingTimeout, lockIDs...) defer guardian.Guardian.UnguardIDs(lockIDs...) for i, rTid := range rIDs { - if r, err := rS.dm.GetResource(rTid.Tenant, rTid.ID, false, ""); err != nil { + if r, err := rS.dm.GetResource(rTid.Tenant, rTid.ID, true, true, ""); err != nil { utils.Logger.Warning( fmt.Sprintf(" force-uncaching resources for evUUID: <%s>, error: <%s>", evUUID, err.Error())) @@ -466,7 +466,7 @@ func (rS *ResourceService) matchingResourcesForEvent(ev *utils.CGREvent, usageTT } else if !pass { continue } - r, err := rS.dm.GetResource(rPrf.Tenant, rPrf.ID, false, "") + r, err := rS.dm.GetResource(rPrf.Tenant, rPrf.ID, true, true, "") if err != nil { return nil, err }