Add Resource in Cache

This commit is contained in:
TeoV
2017-09-05 07:47:52 -04:00
parent 19fd04795e
commit 4742b4b7dd
18 changed files with 50 additions and 23 deletions

View File

@@ -926,7 +926,20 @@ func (self *ApierV1) ReloadCache(attrs utils.AttrReloadCache, reply *string) (er
if err = self.DataDB.CacheDataFromDB(utils.REVERSE_ALIASES_PREFIX, dataIDs, true); err != nil {
return
}
// Resources
// ResourceConfig
dataIDs = make([]string, 0)
if attrs.ResourceConfigIDs == nil {
dataIDs = nil // Reload all
} else if len(*attrs.ResourceConfigIDs) > 0 {
dataIDs = make([]string, len(*attrs.ResourceConfigIDs))
for idx, dId := range *attrs.ResourceConfigIDs {
dataIDs[idx] = dId
}
}
if err = self.DataDB.CacheDataFromDB(utils.ResourceConfigsPrefix, dataIDs, true); err != nil {
return
}
// Resource
dataIDs = make([]string, 0)
if attrs.ResourceIDs == nil {
dataIDs = nil // Reload all
@@ -936,7 +949,7 @@ func (self *ApierV1) ReloadCache(attrs utils.AttrReloadCache, reply *string) (er
dataIDs[idx] = dId
}
}
if err = self.DataDB.CacheDataFromDB(utils.ResourceConfigsPrefix, dataIDs, true); err != nil {
if err = self.DataDB.CacheDataFromDB(utils.ResourcesPrefix, dataIDs, true); err != nil {
return
}
*reply = utils.OK
@@ -947,7 +960,7 @@ func (self *ApierV1) LoadCache(args utils.AttrReloadCache, reply *string) (err e
if args.FlushAll {
cache.Flush()
}
var dstIDs, rvDstIDs, rplIDs, rpfIDs, actIDs, aplIDs, aapIDs, atrgIDs, sgIDs, lcrIDs, dcIDs, alsIDs, rvAlsIDs, rlIDs []string
var dstIDs, rvDstIDs, rplIDs, rpfIDs, actIDs, aplIDs, aapIDs, atrgIDs, sgIDs, lcrIDs, dcIDs, alsIDs, rvAlsIDs, rlIDs, resIDs []string
if args.DestinationIDs == nil {
dstIDs = nil
} else {
@@ -1013,15 +1026,21 @@ func (self *ApierV1) LoadCache(args utils.AttrReloadCache, reply *string) (err e
} else {
rvAlsIDs = *args.ReverseAliasIDs
}
if args.ResourceIDs == nil {
if args.ResourceConfigIDs == nil {
rlIDs = nil
} else {
rlIDs = *args.ResourceIDs
rlIDs = *args.ResourceConfigIDs
}
if args.ResourceIDs == nil {
resIDs = nil
} else {
resIDs = *args.ResourceIDs
}
if err := self.DataDB.LoadRatingCache(dstIDs, rvDstIDs, rplIDs, rpfIDs, actIDs, aplIDs, aapIDs, atrgIDs, sgIDs, lcrIDs, dcIDs); err != nil {
return utils.NewErrServerError(err)
}
if err := self.DataDB.LoadAccountingCache(alsIDs, rvAlsIDs, rlIDs); err != nil {
if err := self.DataDB.LoadAccountingCache(alsIDs, rvAlsIDs, rlIDs, resIDs); err != nil {
return utils.NewErrServerError(err)
}
*reply = utils.OK

View File

@@ -42,7 +42,7 @@ func startRater(internalRaterChan chan rpcclient.RpcClientConnection, cacheDoneC
waitTasks = append(waitTasks, cacheTaskChan)
go func() {
defer close(cacheTaskChan)
var dstIDs, rvDstIDs, rplIDs, rpfIDs, actIDs, aplIDs, aapIDs, atrgIDs, sgIDs, lcrIDs, dcIDs, alsIDs, rvAlsIDs, rlIDs []string
var dstIDs, rvDstIDs, rplIDs, rpfIDs, actIDs, aplIDs, aapIDs, atrgIDs, sgIDs, lcrIDs, dcIDs, alsIDs, rvAlsIDs, rlIDs, resIDs []string
if cCfg, has := cfg.CacheConfig[utils.CacheDestinations]; !has || !cCfg.Precache {
dstIDs = make([]string, 0) // Don't cache any
}
@@ -85,13 +85,17 @@ func startRater(internalRaterChan chan rpcclient.RpcClientConnection, cacheDoneC
if cCfg, has := cfg.CacheConfig[utils.CacheResourceConfigs]; !has || !cCfg.Precache {
rlIDs = make([]string, 0)
}
if cCfg, has := cfg.CacheConfig[utils.CacheResources]; !has || !cCfg.Precache {
resIDs = make([]string, 0)
}
// ToDo: Add here timings
if err := dataDB.LoadRatingCache(dstIDs, rvDstIDs, rplIDs, rpfIDs, actIDs, aplIDs, aapIDs, atrgIDs, sgIDs, lcrIDs, dcIDs); err != nil {
utils.Logger.Crit(fmt.Sprintf("<RALs> Cache rating error: %s", err.Error()))
exitChan <- true
return
}
if err := dataDB.LoadAccountingCache(alsIDs, rvAlsIDs, rlIDs); err != nil {
if err := dataDB.LoadAccountingCache(alsIDs, rvAlsIDs, rlIDs, resIDs); err != nil {
utils.Logger.Crit(fmt.Sprintf("<RALs> Cache accounting error: %s", err.Error()))
exitChan <- true
return

View File

@@ -68,7 +68,7 @@ func durInternalRater(cd *engine.CallDescriptor) (time.Duration, error) {
if err := dataDb.LoadRatingCache(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil); err != nil {
return nilDuration, fmt.Errorf("Cache rating error: %s", err.Error())
}
if err := dataDb.LoadAccountingCache(nil, nil, nil); err != nil {
if err := dataDb.LoadAccountingCache(nil, nil, nil, nil); err != nil {
return nilDuration, fmt.Errorf("Cache accounting error: %s", err.Error())
}
log.Printf("Runnning %d cycles...", *runs)

View File

@@ -348,7 +348,7 @@ func init() {
csvr.WriteToDatabase(false, false, false)
cache.Flush()
dataStorage.LoadRatingCache(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil)
dataStorage.LoadAccountingCache(nil, nil, nil)
dataStorage.LoadAccountingCache(nil, nil, nil, nil)
}
func TestLoadDestinations(t *testing.T) {

View File

@@ -80,7 +80,7 @@ type DataDB interface {
RemAccountActionPlans(acntID string, apIDs []string) (err error)
PushTask(*Task) error
PopTask() (*Task, error)
LoadAccountingCache(alsIDs, rvAlsIDs, rlIDs []string) error
LoadAccountingCache(alsIDs, rvAlsIDs, rlIDs, resIDs []string) error
GetAccount(string) (*Account, error)
SetAccount(*Account) error
RemoveAccount(string) error

View File

@@ -165,7 +165,7 @@ func (ms *MapStorage) LoadRatingCache(dstIDs, rvDstIDs, rplIDs, rpfIDs, actIDs,
return
}
func (ms *MapStorage) LoadAccountingCache(alsIDs, rvAlsIDs, rlIDs []string) error {
func (ms *MapStorage) LoadAccountingCache(alsIDs, rvAlsIDs, rlIDs, resIDs []string) error {
if ms.cacheCfg == nil {
return nil
}

View File

@@ -438,11 +438,12 @@ func (ms *MongoStorage) LoadRatingCache(dstIDs, rvDstIDs, rplIDs, rpfIDs, actIDs
return
}
func (ms *MongoStorage) LoadAccountingCache(alsIDs, rvAlsIDs, rlIDs []string) (err error) {
func (ms *MongoStorage) LoadAccountingCache(alsIDs, rvAlsIDs, rlIDs, resIDs []string) (err error) {
for key, ids := range map[string][]string{
utils.ALIASES_PREFIX: alsIDs,
utils.REVERSE_ALIASES_PREFIX: rvAlsIDs,
utils.ResourceConfigsPrefix: rlIDs,
utils.ResourcesPrefix: resIDs,
} {
if err = ms.CacheDataFromDB(key, ids, false); err != nil {
return

View File

@@ -140,11 +140,12 @@ func (rs *RedisStorage) LoadRatingCache(dstIDs, rvDstIDs, rplIDs, rpfIDs, actIDs
return
}
func (rs *RedisStorage) LoadAccountingCache(alsIDs, rvAlsIDs, rlIDs []string) (err error) {
func (rs *RedisStorage) LoadAccountingCache(alsIDs, rvAlsIDs, rlIDs, resIDs []string) (err error) {
for key, ids := range map[string][]string{
utils.ALIASES_PREFIX: alsIDs,
utils.REVERSE_ALIASES_PREFIX: rvAlsIDs,
utils.ResourceConfigsPrefix: rlIDs,
utils.ResourcesPrefix: resIDs,
} {
if err = rs.CacheDataFromDB(key, ids, false); err != nil {
return

View File

@@ -64,7 +64,7 @@ ENABLE_ACNT,*enable_account,,,,,,,,,,,,,,false,false,10`
cache.Flush()
dbAcntActs.LoadRatingCache(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil)
dbAcntActs.LoadAccountingCache(nil, nil, nil)
dbAcntActs.LoadAccountingCache(nil, nil, nil, nil)
expectAcnt := &engine.Account{ID: "cgrates.org:1"}
if acnt, err := dbAcntActs.GetAccount("cgrates.org:1"); err != nil {

View File

@@ -76,7 +76,7 @@ RP_ANY,DR_ANY_1CNT,*any,10`
cache.Flush()
dbAuth.LoadRatingCache(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil)
dbAuth.LoadAccountingCache(nil, nil, nil)
dbAuth.LoadAccountingCache(nil, nil, nil, nil)
if cachedDests := cache.CountEntries(utils.DESTINATION_PREFIX); cachedDests != 0 {
t.Error("Wrong number of cached destinations found", cachedDests)

View File

@@ -74,7 +74,7 @@ RP_SMS1,DR_SMS_1,ALWAYS,10`
csvr.WriteToDatabase(false, false, false)
cache.Flush()
dataDB.LoadRatingCache(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil)
dataDB.LoadAccountingCache(nil, nil, nil)
dataDB.LoadAccountingCache(nil, nil, nil, nil)
if cachedRPlans := cache.CountEntries(utils.RATING_PLAN_PREFIX); cachedRPlans != 3 {
t.Error("Wrong number of cached rating plans found", cachedRPlans)

View File

@@ -61,7 +61,7 @@ RP_DATA1,DR_DATA_2,TM2,10`
csvr.WriteToDatabase(false, false, false)
cache.Flush()
dataDB.LoadRatingCache(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil)
dataDB.LoadAccountingCache(nil, nil, nil)
dataDB.LoadAccountingCache(nil, nil, nil, nil)
if cachedRPlans := cache.CountEntries(utils.RATING_PLAN_PREFIX); cachedRPlans != 1 {
t.Error("Wrong number of cached rating plans found", cachedRPlans)

View File

@@ -111,7 +111,7 @@ TOPUP10_AT,TOPUP10_AC1,ASAP,10`
}
cache.Flush()
dataDB.LoadRatingCache(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil)
dataDB.LoadAccountingCache(nil, nil, nil)
dataDB.LoadAccountingCache(nil, nil, nil, nil)
if cachedDests := cache.CountEntries(utils.DESTINATION_PREFIX); cachedDests != 0 {
t.Error("Wrong number of cached destinations found", cachedDests)

View File

@@ -111,7 +111,7 @@ TOPUP10_AT,TOPUP10_AC1,ASAP,10`
}
cache.Flush()
dataDB2.LoadRatingCache(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil)
dataDB2.LoadAccountingCache(nil, nil, nil)
dataDB2.LoadAccountingCache(nil, nil, nil, nil)
if cachedDests := cache.CountEntries(utils.DESTINATION_PREFIX); cachedDests != 0 {
t.Error("Wrong number of cached destinations found", cachedDests)

View File

@@ -109,7 +109,7 @@ RP_UK,DR_UK_Mobile_BIG5,ALWAYS,10`
}
cache.Flush()
dataDB3.LoadRatingCache(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil)
dataDB3.LoadAccountingCache(nil, nil, nil)
dataDB3.LoadAccountingCache(nil, nil, nil, nil)
if cachedDests := cache.CountEntries(utils.DESTINATION_PREFIX); cachedDests != 0 {
t.Error("Wrong number of cached destinations found", cachedDests)

View File

@@ -59,7 +59,7 @@ func TestSMSLoadCsvTpSmsChrg1(t *testing.T) {
csvr.WriteToDatabase(false, false, false)
cache.Flush()
dataDB.LoadRatingCache(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil)
dataDB.LoadAccountingCache(nil, nil, nil)
dataDB.LoadAccountingCache(nil, nil, nil, nil)
if cachedRPlans := cache.CountEntries(utils.RATING_PLAN_PREFIX); cachedRPlans != 1 {
t.Error("Wrong number of cached rating plans found", cachedRPlans)

View File

@@ -104,7 +104,7 @@ func TestTutITCacheStats(t *testing.T) {
var rcvStats *utils.CacheStats
expectedStats := &utils.CacheStats{Destinations: 5, ReverseDestinations: 7, RatingPlans: 4, RatingProfiles: 9,
Actions: 8, ActionPlans: 4, AccountActionPlans: 5, SharedGroups: 1, DerivedChargers: 1, LcrProfiles: 5,
CdrStats: 6, Users: 3, Aliases: 1, ReverseAliases: 2, Resources: 3}
CdrStats: 6, Users: 3, Aliases: 1, ReverseAliases: 2, ResourcesConfig: 0, Resources: 3}
var args utils.AttrCacheStats
if err := tutLocalRpc.Call("ApierV1.GetCacheStats", args, &rcvStats); err != nil {
t.Error("Got error on ApierV1.GetCacheStats: ", err.Error())

View File

@@ -667,6 +667,7 @@ type ArgsCache struct {
DerivedChargerIDs *[]string
AliasIDs *[]string
ReverseAliasIDs *[]string
ResourceConfigIDs *[]string
ResourceIDs *[]string
StatsIDs *[]string
ThresholdsIDs *[]string
@@ -704,6 +705,7 @@ type CacheStats struct {
Users int
Aliases int
ReverseAliases int
ResourcesConfig int
Resources int
//Stats int
//thresholds int