Clarify cacheRead / cacheWrite for chargers

This commit is contained in:
TeoV
2018-09-24 14:47:32 -04:00
committed by Dan Christian Bogos
parent 2776713566
commit 6c3e5d80ee
11 changed files with 38 additions and 36 deletions

View File

@@ -28,7 +28,7 @@ func (apierV1 *ApierV1) GetChargerProfile(arg utils.TenantID, reply *engine.Char
if missing := utils.MissingStructFields(&arg, []string{"Tenant", "ID"}); len(missing) != 0 { //Params missing
return utils.NewErrMandatoryIeMissing(missing...)
}
if cpp, err := apierV1.DataManager.GetChargerProfile(arg.Tenant, arg.ID, false, utils.NonTransactional); err != nil {
if cpp, err := apierV1.DataManager.GetChargerProfile(arg.Tenant, arg.ID, true, true, utils.NonTransactional); err != nil {
if err.Error() != utils.ErrNotFound.Error() {
err = utils.NewErrServerError(err)
}

View File

@@ -265,7 +265,7 @@ func (self *ApierV1) ComputeFilterIndexes(args utils.ArgsComputeFilterIndexes, r
if cppIndexes != nil {
if err := attrIndexes.StoreIndexes(true, transactionID); err != nil {
for _, id := range *args.ChargerIDs {
cpp, err := self.DataManager.GetChargerProfile(args.Tenant, id, false, utils.NonTransactional)
cpp, err := self.DataManager.GetChargerProfile(args.Tenant, id, true, false, utils.NonTransactional)
if err != nil {
return err
}
@@ -632,7 +632,7 @@ func (self *ApierV1) computeChargerIndexes(tenant string, cppIDs *[]string,
transactionID = utils.NonTransactional
}
for _, id := range chargerIDs {
cpp, err := self.DataManager.GetChargerProfile(tenant, id, false, utils.NonTransactional)
cpp, err := self.DataManager.GetChargerProfile(tenant, id, true, false, utils.NonTransactional)
if err != nil {
return nil, err
}

View File

@@ -34,7 +34,7 @@
"cdrs": {
"enabled": true,
"chargers_conns":[
{"address": "*internal"},
{"address": "127.0.0.1:2012", "transport": "*json"},
],
},
@@ -42,7 +42,7 @@
"chargers": {
"enabled": true,
"attributes_conns": [
{"address": "*internal"}
{"address": "127.0.0.1:2012", "transport": "*json"}
],
},
@@ -67,7 +67,7 @@
"enabled": true,
"store_interval": "1s",
"thresholds_conns": [
{"address": "*internal"}
{"address": "127.0.0.1:2012", "transport": "*json"}
],
},
@@ -81,28 +81,28 @@
"enabled": true,
"session_ttl": "50ms",
"chargers_conns": [
{"address": "*internal"}
{"address": "127.0.0.1:2012", "transport": "*json"}
],
"rals_conns": [
{"address": "*internal"}
{"address": "127.0.0.1:2012", "transport": "*json"}
],
"cdrs_conns": [
{"address": "*internal"}
{"address": "127.0.0.1:2012", "transport": "*json"}
],
"resources_conns": [
{"address": "*internal"}
{"address": "127.0.0.1:2012", "transport": "*json"}
],
"thresholds_conns": [
{"address": "*internal"}
{"address": "127.0.0.1:2012", "transport": "*json"}
],
"stats_conns": [
{"address": "*internal"}
{"address": "127.0.0.1:2012", "transport": "*json"}
],
"suppliers_conns": [
{"address": "*internal"}
{"address": "127.0.0.1:2012", "transport": "*json"}
],
"attributes_conns": [
{"address": "*internal"}
{"address": "127.0.0.1:2012", "transport": "*json"}
],
},

View File

@@ -71,7 +71,7 @@ func (cS *ChargerService) matchingChargerProfilesForEvent(cgrEv *utils.CGREvent)
}
matchingCPs := make(map[string]*ChargerProfile)
for cpID := range cpIDs {
cP, err := cS.dm.GetChargerProfile(cgrEv.Tenant, cpID, false, utils.NonTransactional)
cP, err := cS.dm.GetChargerProfile(cgrEv.Tenant, cpID, true, true, utils.NonTransactional)
if err != nil {
if err == utils.ErrNotFound {
continue

View File

@@ -176,7 +176,7 @@ func TestChargerSetChargerProfiles(t *testing.T) {
//verify each charger from cache
for _, cp := range cPPs {
if tempCp, err := dmCharger.GetChargerProfile(cp.Tenant, cp.ID,
false, utils.NonTransactional); err != nil {
true, true, utils.NonTransactional); err != nil {
t.Errorf("Error: %+v", err)
} else if !reflect.DeepEqual(cp, tempCp) {
t.Errorf("Expecting: %+v, received: %+v", cp, tempCp)

View File

@@ -244,7 +244,7 @@ func (dm *DataManager) CacheDataFromDB(prfx string, ids []string, mustBeCached b
_, err = dm.GetAttributeProfile(tntID.Tenant, tntID.ID, false, true, utils.NonTransactional)
case utils.ChargerProfilePrefix:
tntID := utils.NewTenantID(dataID)
_, err = dm.GetChargerProfile(tntID.Tenant, tntID.ID, true, utils.NonTransactional)
_, err = dm.GetChargerProfile(tntID.Tenant, tntID.ID, false, true, utils.NonTransactional)
}
if err != nil {
return utils.NewCGRError(utils.DataManager,
@@ -1234,10 +1234,10 @@ func (dm *DataManager) RemoveAttributeProfile(tenant, id string, contexts []stri
return
}
func (dm *DataManager) GetChargerProfile(tenant, id string, skipCache bool,
func (dm *DataManager) GetChargerProfile(tenant, id string, cacheRead, cacheWrite bool,
transactionID string) (cpp *ChargerProfile, err error) {
tntID := utils.ConcatenatedKey(tenant, id)
if !skipCache {
if cacheRead {
if x, ok := Cache.Get(utils.CacheChargerProfiles, tntID); ok {
if x == nil {
return nil, utils.ErrNotFound
@@ -1247,19 +1247,21 @@ func (dm *DataManager) GetChargerProfile(tenant, id string, skipCache bool,
}
cpp, err = dm.dataDB.GetChargerProfileDrv(tenant, id)
if err != nil {
if err == utils.ErrNotFound {
if err == utils.ErrNotFound && cacheWrite {
Cache.Set(utils.CacheChargerProfiles, tntID, nil, nil,
cacheCommit(transactionID), transactionID)
}
return nil, err
}
Cache.Set(utils.CacheChargerProfiles, tntID, cpp, nil,
cacheCommit(transactionID), transactionID)
if cacheWrite {
Cache.Set(utils.CacheChargerProfiles, tntID, cpp, nil,
cacheCommit(transactionID), transactionID)
}
return
}
func (dm *DataManager) SetChargerProfile(cpp *ChargerProfile, withIndex bool) (err error) {
oldCpp, err := dm.GetChargerProfile(cpp.Tenant, cpp.ID, true, utils.NonTransactional)
oldCpp, err := dm.GetChargerProfile(cpp.Tenant, cpp.ID, true, false, utils.NonTransactional)
if err != nil && err != utils.ErrNotFound {
return err
}
@@ -1291,7 +1293,7 @@ func (dm *DataManager) SetChargerProfile(cpp *ChargerProfile, withIndex bool) (e
func (dm *DataManager) RemoveChargerProfile(tenant, id string,
transactionID string, withIndex bool) (err error) {
oldCpp, err := dm.GetChargerProfile(tenant, id, true, utils.NonTransactional)
oldCpp, err := dm.GetChargerProfile(tenant, id, true, false, utils.NonTransactional)
if err != nil && err != utils.ErrNotFound {
return err
}

View File

@@ -191,7 +191,7 @@ func (rfi *FilterIndexer) RemoveItemFromIndex(tenant, itemID string, oldFilters
}
}
case utils.ChargerProfilePrefix:
cpp, err := rfi.dm.GetChargerProfile(tenant, itemID, false, utils.NonTransactional)
cpp, err := rfi.dm.GetChargerProfile(tenant, itemID, true, false, utils.NonTransactional)
if err != nil && err != utils.ErrNotFound {
return err
}

View File

@@ -502,7 +502,7 @@ func TestLoaderITWriteToDatabase(t *testing.T) {
}
for tenatid, cpp := range loader.chargerProfiles {
rcv, err := loader.dm.GetChargerProfile(tenatid.Tenant, tenatid.ID, true, utils.NonTransactional)
rcv, err := loader.dm.GetChargerProfile(tenatid.Tenant, tenatid.ID, false, false, utils.NonTransactional)
if err != nil {
t.Errorf("Failed GetChargerProfile, tenant: %s, id: %s, error: %s ", cpp.Tenant, cpp.ID, err.Error())
}

View File

@@ -2682,7 +2682,7 @@ func testOnStorITChargerProfile(t *testing.T) {
Weight: 20,
}
if _, rcvErr := onStor.GetChargerProfile("cgrates.org", "CPP_1",
false, utils.NonTransactional); rcvErr != nil && rcvErr != utils.ErrNotFound {
true, false, utils.NonTransactional); rcvErr != nil && rcvErr != utils.ErrNotFound {
t.Error(rcvErr)
}
if err := onStor.SetChargerProfile(cpp, false); err != nil {
@@ -2690,14 +2690,14 @@ func testOnStorITChargerProfile(t *testing.T) {
}
//get from cache
if rcv, err := onStor.GetChargerProfile("cgrates.org", "CPP_1",
false, utils.NonTransactional); err != nil {
true, false, utils.NonTransactional); err != nil {
t.Error(err)
} else if !(reflect.DeepEqual(cpp, rcv)) {
t.Errorf("Expecting: %v, received: %v", cpp, rcv)
}
//get from database
if rcv, err := onStor.GetChargerProfile("cgrates.org", "CPP_1",
true, utils.NonTransactional); err != nil {
false, false, utils.NonTransactional); err != nil {
t.Error(err)
} else if !(reflect.DeepEqual(cpp, rcv)) {
t.Errorf("Expecting: %v, received: %v", cpp, rcv)
@@ -2716,14 +2716,14 @@ func testOnStorITChargerProfile(t *testing.T) {
time.Sleep(sleepDelay)
//get from cache
if rcv, err := onStor.GetChargerProfile("cgrates.org", "CPP_1",
false, utils.NonTransactional); err != nil {
true, false, utils.NonTransactional); err != nil {
t.Error(err)
} else if !(reflect.DeepEqual(cpp, rcv)) {
t.Errorf("Expecting: %v, received: %v", cpp, rcv)
}
//get from database
if rcv, err := onStor.GetChargerProfile("cgrates.org", "CPP_1",
true, utils.NonTransactional); err != nil {
false, false, utils.NonTransactional); err != nil {
t.Error(err)
} else if !(reflect.DeepEqual(cpp, rcv)) {
t.Errorf("Expecting: %v, received: %v", cpp, rcv)
@@ -2734,12 +2734,12 @@ func testOnStorITChargerProfile(t *testing.T) {
}
//check cache if removed
if _, rcvErr := onStor.GetChargerProfile("cgrates.org", "CPP_1",
false, utils.NonTransactional); rcvErr != nil && rcvErr != utils.ErrNotFound {
true, false, utils.NonTransactional); rcvErr != nil && rcvErr != utils.ErrNotFound {
t.Error(rcvErr)
}
//check database if removed
if _, rcvErr := onStor.GetChargerProfile("cgrates.org", "CPP_1",
true, utils.NonTransactional); rcvErr != nil && rcvErr != utils.ErrNotFound {
false, false, utils.NonTransactional); rcvErr != nil && rcvErr != utils.ErrNotFound {
t.Error(rcvErr)
}
}

View File

@@ -1030,13 +1030,13 @@ cgrates.org,Charge2,*string:Account:1003,2014-07-29T15:00:00Z,*default,Attr3,10
Weight: 10,
}
if rcv, err := ldr.dm.GetChargerProfile("cgrates.org", "Charge1",
false, utils.NonTransactional); err != nil {
true, false, utils.NonTransactional); err != nil {
t.Error(err)
} else if !reflect.DeepEqual(eCharger1, rcv) && !reflect.DeepEqual(eCharger1Rev, rcv) {
t.Errorf("expecting: %s, received: %s", utils.ToJSON(eCharger1), utils.ToJSON(rcv))
}
if rcv, err := ldr.dm.GetChargerProfile("cgrates.org", "Charge2",
false, utils.NonTransactional); err != nil {
true, false, utils.NonTransactional); err != nil {
t.Error(err)
} else if !reflect.DeepEqual(eCharger2, rcv) {
t.Errorf("expecting: %+v, received: %+v", eCharger2, rcv)

View File

@@ -36,7 +36,7 @@ func (m *Migrator) migrateCurrentCharger() (err error) {
}
for _, id := range ids {
idg := strings.TrimPrefix(id, utils.ChargerProfilePrefix+tenant+":")
cpp, err := m.dmIN.DataManager().GetChargerProfile(tenant, idg, true, utils.NonTransactional)
cpp, err := m.dmIN.DataManager().GetChargerProfile(tenant, idg, false, false, utils.NonTransactional)
if err != nil {
return err
}