CacheDataFromDB with ActionTriggers support

This commit is contained in:
DanB
2016-12-21 17:05:01 +01:00
parent 03a9569190
commit f3788bf810
3 changed files with 79 additions and 27 deletions

View File

@@ -51,6 +51,7 @@ var sTestsOnStorIT = []func(t *testing.T){
testOnStorITCacheRatingProfile,
testOnStorITCacheActions,
testOnStorITCacheActionPlan,
testOnStorITCacheActionTriggers,
testOnStorITCacheSharedGroup,
testOnStorITCacheDerivedChargers,
testOnStorITCacheLCR,
@@ -454,6 +455,35 @@ func testOnStorITCacheActionPlan(t *testing.T) {
}
}
func testOnStorITCacheActionTriggers(t *testing.T) {
ats := ActionTriggers{
&ActionTrigger{
ID: "testOnStorITCacheActionTrigger",
Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)), Timings: make([]*RITiming, 0)},
ThresholdValue: 2,
ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER,
ActionsID: "TEST_ACTIONS",
LastExecutionTime: time.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC).Local(),
ExpirationDate: time.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC).Local(),
ActivationDate: time.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC).Local()},
}
atsID := ats[0].ID
if err := onStor.SetActionTriggers(atsID, ats, utils.NonTransactional); err != nil {
t.Error(err)
}
if _, hasIt := cache.Get(utils.ACTION_TRIGGER_PREFIX + atsID); hasIt {
t.Error("Already in cache")
}
if err := onStor.CacheDataFromDB(utils.ACTION_TRIGGER_PREFIX, []string{atsID}, false); err != nil {
t.Error(err)
}
if itm, hasIt := cache.Get(utils.ACTION_TRIGGER_PREFIX + atsID); !hasIt {
t.Error("Did not cache")
} else if rcv := itm.(ActionTriggers); !reflect.DeepEqual(ats, rcv) {
t.Errorf("Expecting: %+v, received: %+v", ats, rcv)
}
}
func testOnStorITCacheSharedGroup(t *testing.T) {
sg := &SharedGroup{
Id: "SG1",

View File

@@ -447,6 +447,7 @@ func (ms *MongoStorage) CacheDataFromDB(prfx string, ids []string, mustBeCached
utils.RATING_PROFILE_PREFIX,
utils.ACTION_PREFIX,
utils.ACTION_PLAN_PREFIX,
utils.ACTION_TRIGGER_PREFIX,
utils.SHARED_GROUP_PREFIX,
utils.DERIVEDCHARGERS_PREFIX,
utils.LCR_PREFIX,
@@ -491,6 +492,8 @@ func (ms *MongoStorage) CacheDataFromDB(prfx string, ids []string, mustBeCached
nrItems = ms.cacheCfg.Actions.Limit
case utils.ACTION_PLAN_PREFIX:
nrItems = ms.cacheCfg.ActionPlans.Limit
case utils.ACTION_TRIGGER_PREFIX:
nrItems = ms.cacheCfg.ActionTriggers.Limit
case utils.SHARED_GROUP_PREFIX:
nrItems = ms.cacheCfg.SharedGroups.Limit
case utils.DERIVEDCHARGERS_PREFIX:
@@ -527,6 +530,8 @@ func (ms *MongoStorage) CacheDataFromDB(prfx string, ids []string, mustBeCached
_, err = ms.GetActions(dataID, false, utils.NonTransactional)
case utils.ACTION_PLAN_PREFIX:
_, err = ms.GetActionPlan(dataID, false, utils.NonTransactional)
case utils.ACTION_TRIGGER_PREFIX:
_, err = ms.GetActionTriggers(dataID, true, utils.NonTransactional)
case utils.SHARED_GROUP_PREFIX:
_, err = ms.GetSharedGroup(dataID, false, utils.NonTransactional)
case utils.DERIVEDCHARGERS_PREFIX:
@@ -1425,8 +1430,9 @@ func (ms *MongoStorage) AddLoadHistory(ldInst *utils.LoadInstance, loadHistSize
}
func (ms *MongoStorage) GetActionTriggers(key string, skipCache bool, transactionID string) (atrs ActionTriggers, err error) {
cacheKey := utils.ACTION_TRIGGER_PREFIX + key
if !skipCache {
if x, ok := cache.Get(utils.ACTION_TRIGGER_PREFIX + key); ok {
if x, ok := cache.Get(cacheKey); ok {
if x != nil {
return x.(ActionTriggers), nil
}
@@ -1440,11 +1446,15 @@ func (ms *MongoStorage) GetActionTriggers(key string, skipCache bool, transactio
}
session, col := ms.conn(colAtr)
defer session.Close()
err = col.Find(bson.M{"key": key}).One(&kv)
if err == nil {
atrs = kv.Value
if err = col.Find(bson.M{"key": key}).One(&kv); err != nil {
if err == mgo.ErrNotFound {
cache.Set(cacheKey, nil, cacheCommit(transactionID), transactionID)
err = utils.ErrNotFound
}
return
}
cache.Set(utils.ACTION_TRIGGER_PREFIX+key, atrs, cacheCommit(transactionID), transactionID)
atrs = kv.Value
cache.Set(cacheKey, atrs, cacheCommit(transactionID), transactionID)
return
}
@@ -1462,7 +1472,6 @@ func (ms *MongoStorage) SetActionTriggers(key string, atrs ActionTriggers, trans
Key string
Value ActionTriggers
}{Key: key, Value: atrs})
cache.RemKey(utils.ACTION_TRIGGER_PREFIX+key, cacheCommit(transactionID), transactionID)
return err
}

View File

@@ -239,6 +239,7 @@ func (rs *RedisStorage) CacheDataFromDB(prfx string, ids []string, mustBeCached
utils.RATING_PROFILE_PREFIX,
utils.ACTION_PREFIX,
utils.ACTION_PLAN_PREFIX,
utils.ACTION_TRIGGER_PREFIX,
utils.SHARED_GROUP_PREFIX,
utils.DERIVEDCHARGERS_PREFIX,
utils.LCR_PREFIX,
@@ -283,6 +284,8 @@ func (rs *RedisStorage) CacheDataFromDB(prfx string, ids []string, mustBeCached
nrItems = rs.cacheCfg.Actions.Limit
case utils.ACTION_PLAN_PREFIX:
nrItems = rs.cacheCfg.ActionPlans.Limit
case utils.ACTION_TRIGGER_PREFIX:
nrItems = rs.cacheCfg.ActionTriggers.Limit
case utils.SHARED_GROUP_PREFIX:
nrItems = rs.cacheCfg.SharedGroups.Limit
case utils.DERIVEDCHARGERS_PREFIX:
@@ -308,29 +311,31 @@ func (rs *RedisStorage) CacheDataFromDB(prfx string, ids []string, mustBeCached
}
switch prfx {
case utils.DESTINATION_PREFIX:
_, err = rs.GetDestination(dataID, false, utils.NonTransactional)
_, err = rs.GetDestination(dataID, true, utils.NonTransactional)
case utils.REVERSE_DESTINATION_PREFIX:
_, err = rs.GetReverseDestination(dataID, false, utils.NonTransactional)
_, err = rs.GetReverseDestination(dataID, true, utils.NonTransactional)
case utils.RATING_PLAN_PREFIX:
_, err = rs.GetRatingPlan(dataID, false, utils.NonTransactional)
_, err = rs.GetRatingPlan(dataID, true, utils.NonTransactional)
case utils.RATING_PROFILE_PREFIX:
_, err = rs.GetRatingProfile(dataID, false, utils.NonTransactional)
_, err = rs.GetRatingProfile(dataID, true, utils.NonTransactional)
case utils.ACTION_PREFIX:
_, err = rs.GetActions(dataID, false, utils.NonTransactional)
_, err = rs.GetActions(dataID, true, utils.NonTransactional)
case utils.ACTION_PLAN_PREFIX:
_, err = rs.GetActionPlan(dataID, false, utils.NonTransactional)
_, err = rs.GetActionPlan(dataID, true, utils.NonTransactional)
case utils.ACTION_TRIGGER_PREFIX:
_, err = rs.GetActionTriggers(dataID, true, utils.NonTransactional)
case utils.SHARED_GROUP_PREFIX:
_, err = rs.GetSharedGroup(dataID, false, utils.NonTransactional)
_, err = rs.GetSharedGroup(dataID, true, utils.NonTransactional)
case utils.DERIVEDCHARGERS_PREFIX:
_, err = rs.GetDerivedChargers(dataID, false, utils.NonTransactional)
_, err = rs.GetDerivedChargers(dataID, true, utils.NonTransactional)
case utils.LCR_PREFIX:
_, err = rs.GetLCR(dataID, false, utils.NonTransactional)
_, err = rs.GetLCR(dataID, true, utils.NonTransactional)
case utils.ALIASES_PREFIX:
_, err = rs.GetAlias(dataID, false, utils.NonTransactional)
_, err = rs.GetAlias(dataID, true, utils.NonTransactional)
case utils.REVERSE_ALIASES_PREFIX:
_, err = rs.GetReverseAlias(dataID, false, utils.NonTransactional)
_, err = rs.GetReverseAlias(dataID, true, utils.NonTransactional)
case utils.ResourceLimitsPrefix:
_, err = rs.GetResourceLimit(dataID, false, utils.NonTransactional)
_, err = rs.GetResourceLimit(dataID, true, utils.NonTransactional)
}
if err != nil {
return utils.NewCGRError(utils.REDIS,
@@ -1069,15 +1074,22 @@ func (rs *RedisStorage) GetActionTriggers(key string, skipCache bool, transactio
key = utils.ACTION_TRIGGER_PREFIX + key
if !skipCache {
if x, ok := cache.Get(key); ok {
if x != nil {
return x.(ActionTriggers), nil
if x == nil {
return nil, utils.ErrNotFound
}
return nil, utils.ErrNotFound
return x.(ActionTriggers), nil
}
}
var values []byte
if values, err = rs.Cmd("GET", key).Bytes(); err == nil {
err = rs.ms.Unmarshal(values, &atrs)
if values, err = rs.Cmd("GET", key).Bytes(); err != nil {
if err.Error() == "wrong type" { // did not find the destination
cache.Set(key, nil, cacheCommit(transactionID), transactionID)
err = utils.ErrNotFound
}
return
}
if err = rs.ms.Unmarshal(values, &atrs); err != nil {
return
}
cache.Set(key, atrs, cacheCommit(transactionID), transactionID)
return
@@ -1088,12 +1100,13 @@ func (rs *RedisStorage) SetActionTriggers(key string, atrs ActionTriggers, trans
// delete the key
return rs.Cmd("DEL", utils.ACTION_TRIGGER_PREFIX+key).Err
}
result, err := rs.ms.Marshal(atrs)
if err != nil {
var result []byte
if result, err = rs.ms.Marshal(atrs); err != nil {
return err
}
err = rs.Cmd("SET", utils.ACTION_TRIGGER_PREFIX+key, result).Err
cache.RemKey(utils.ACTION_TRIGGER_PREFIX+key, cacheCommit(transactionID), transactionID)
if err = rs.Cmd("SET", utils.ACTION_TRIGGER_PREFIX+key, result).Err; err != nil {
return
}
return
}