diff --git a/apier/v1/accounts.go b/apier/v1/accounts.go index 9f8821b92..f21265c7a 100644 --- a/apier/v1/accounts.go +++ b/apier/v1/accounts.go @@ -260,7 +260,7 @@ func (self *ApierV1) SetAccount(attr utils.AttrSetAccount, reply *string) (err e } if attr.ActionTriggersId != "" { - atrs, err := self.DataManager.DataDB().GetActionTriggers(attr.ActionTriggersId, false, utils.NonTransactional) + atrs, err := self.DataManager.GetActionTriggers(attr.ActionTriggersId, false, utils.NonTransactional) if err != nil { return 0, err } diff --git a/apier/v1/triggers.go b/apier/v1/triggers.go index 7d5e7a4e3..b96880fd7 100644 --- a/apier/v1/triggers.go +++ b/apier/v1/triggers.go @@ -74,7 +74,7 @@ func (self *ApierV1) AddAccountActionTriggers(attr AttrAddAccountActionTriggers, account.ActionTriggers = make(engine.ActionTriggers, 0) } for _, actionTriggerID := range *attr.ActionTriggerIDs { - atrs, err := self.DataManager.DataDB().GetActionTriggers(actionTriggerID, false, utils.NonTransactional) + atrs, err := self.DataManager.GetActionTriggers(actionTriggerID, false, utils.NonTransactional) if err != nil { return 0, err } @@ -356,7 +356,7 @@ func (self *ApierV1) RemoveActionTrigger(attr AttrRemoveActionTrigger, reply *st } return err } else { - atrs, err := self.DataManager.DataDB().GetActionTriggers(attr.GroupID, false, utils.NonTransactional) + atrs, err := self.DataManager.GetActionTriggers(attr.GroupID, false, utils.NonTransactional) if err != nil { *reply = err.Error() return err @@ -410,7 +410,7 @@ func (self *ApierV1) SetActionTrigger(attr AttrSetActionTrigger, reply *string) return utils.NewErrMandatoryIeMissing(missing...) } - atrs, _ := self.DataManager.DataDB().GetActionTriggers(attr.GroupID, false, utils.NonTransactional) + atrs, _ := self.DataManager.GetActionTriggers(attr.GroupID, false, utils.NonTransactional) var newAtr *engine.ActionTrigger if attr.UniqueID != "" { //search for exiting one @@ -533,7 +533,7 @@ func (self *ApierV1) GetActionTriggers(attr AttrGetActionTriggers, atrs *engine. var allAttrs engine.ActionTriggers if len(attr.GroupIDs) > 0 { for _, key := range attr.GroupIDs { - getAttrs, err := self.DataManager.DataDB().GetActionTriggers(key, false, utils.NonTransactional) + getAttrs, err := self.DataManager.GetActionTriggers(key, false, utils.NonTransactional) if err != nil { return err } @@ -546,7 +546,7 @@ func (self *ApierV1) GetActionTriggers(attr AttrGetActionTriggers, atrs *engine. return err } for _, key := range keys { - getAttrs, err := self.DataManager.DataDB().GetActionTriggers(key[len(utils.ACTION_TRIGGER_PREFIX):], false, utils.NonTransactional) + getAttrs, err := self.DataManager.GetActionTriggers(key[len(utils.ACTION_TRIGGER_PREFIX):], false, utils.NonTransactional) if err != nil { return err } diff --git a/apier/v2/accounts.go b/apier/v2/accounts.go index e86b5ca72..8dbcdcdbc 100644 --- a/apier/v2/accounts.go +++ b/apier/v2/accounts.go @@ -194,7 +194,7 @@ func (self *ApierV2) SetAccount(attr AttrSetAccount, reply *string) error { ub.ActionTriggers = make(engine.ActionTriggers, 0) } for _, actionTriggerID := range *attr.ActionTriggerIDs { - atrs, err := self.DataManager.DataDB().GetActionTriggers(actionTriggerID, false, utils.NonTransactional) + atrs, err := self.DataManager.GetActionTriggers(actionTriggerID, false, utils.NonTransactional) if err != nil { return 0, err } diff --git a/engine/datamanager.go b/engine/datamanager.go index c754edce8..da7733459 100644 --- a/engine/datamanager.go +++ b/engine/datamanager.go @@ -175,7 +175,7 @@ func (dm *DataManager) CacheDataFromDB(prfx string, ids []string, mustBeCached b case utils.AccountActionPlansPrefix: _, err = dm.DataDB().GetAccountActionPlans(dataID, true, utils.NonTransactional) case utils.ACTION_TRIGGER_PREFIX: - _, err = dm.DataDB().GetActionTriggers(dataID, true, utils.NonTransactional) + _, err = dm.GetActionTriggers(dataID, true, utils.NonTransactional) case utils.SHARED_GROUP_PREFIX: _, err = dm.DataDB().GetSharedGroup(dataID, true, utils.NonTransactional) case utils.DERIVEDCHARGERS_PREFIX: @@ -494,3 +494,25 @@ func (dm *DataManager) RemoveResourceProfile(tenant, id, transactionID string) ( cacheCommit(transactionID), transactionID) return } + +func (dm *DataManager) GetActionTriggers(id string, skipCache bool, transactionID string) (attrs ActionTriggers, err error) { + key := utils.ACTION_TRIGGER_PREFIX + id + if !skipCache { + if x, ok := cache.Get(key); ok { + if x == nil { + return nil, utils.ErrNotFound + } + return x.(ActionTriggers), nil + } + } + attrs, err = dm.dataDB.GetActionTriggersDrv(id) + if err != nil { + if err == utils.ErrNotFound { + cache.Set(key, nil, cacheCommit(transactionID), transactionID) + } + return nil, err + } + cache.Set(key, attrs, cacheCommit(transactionID), transactionID) + return + +} diff --git a/engine/loader_it_test.go b/engine/loader_it_test.go index fc7f06998..8beefbd5f 100755 --- a/engine/loader_it_test.go +++ b/engine/loader_it_test.go @@ -191,7 +191,7 @@ func TestLoaderITWriteToDatabase(t *testing.T) { } for k, atrs := range loader.actionsTriggers { - rcv, err := loader.dataStorage.GetActionTriggers(k, true, utils.NonTransactional) + rcv, err := loader.dm.GetActionTriggers(k, true, utils.NonTransactional) if err != nil { t.Error("Failed GetActionTriggers: ", err.Error()) } diff --git a/engine/onstor_it_test.go b/engine/onstor_it_test.go index dafec58f0..b3f068a22 100644 --- a/engine/onstor_it_test.go +++ b/engine/onstor_it_test.go @@ -1397,13 +1397,13 @@ func testOnStorITCRUDActionTriggers(t *testing.T) { ActivationDate: time.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC).Local()}, } atsID := ats[0].ID - if _, rcvErr := onStor.DataDB().GetActionTriggers(atsID, true, utils.NonTransactional); rcvErr != utils.ErrNotFound { + if _, rcvErr := onStor.GetActionTriggers(atsID, true, utils.NonTransactional); rcvErr != utils.ErrNotFound { t.Error(rcvErr) } if err := onStor.DataDB().SetActionTriggers(atsID, ats, utils.NonTransactional); err != nil { t.Error(err) } - if rcv, err := onStor.DataDB().GetActionTriggers(atsID, true, utils.NonTransactional); err != nil { + if rcv, err := onStor.GetActionTriggers(atsID, true, utils.NonTransactional); err != nil { t.Error(err) } else if !reflect.DeepEqual(ats[0], rcv[0]) { t.Errorf("Expecting: %v, received: %v", ats[0], rcv[0]) @@ -1416,7 +1416,7 @@ func testOnStorITCRUDActionTriggers(t *testing.T) { // t.Error(rcvErr) // } // - if rcv, err := onStor.DataDB().GetActionTriggers(atsID, false, utils.NonTransactional); err != nil { + if rcv, err := onStor.GetActionTriggers(atsID, false, utils.NonTransactional); err != nil { t.Error(err) } else if !reflect.DeepEqual(ats[0], rcv[0]) { t.Errorf("Expecting: %v, received: %v", ats[0], rcv[0]) @@ -1428,7 +1428,7 @@ func testOnStorITCRUDActionTriggers(t *testing.T) { if err := onStor.DataDB().RemoveActionTriggers(atsID, utils.NonTransactional); err != nil { t.Error(err) } - if _, rcvErr := onStor.DataDB().GetActionTriggers(atsID, true, utils.NonTransactional); rcvErr != utils.ErrNotFound { + if _, rcvErr := onStor.GetActionTriggers(atsID, true, utils.NonTransactional); rcvErr != utils.ErrNotFound { t.Error(rcvErr) } } diff --git a/engine/storage_interface.go b/engine/storage_interface.go index c2b334b60..63af44115 100755 --- a/engine/storage_interface.go +++ b/engine/storage_interface.go @@ -71,7 +71,7 @@ type DataDB interface { RemoveActions(string, string) error GetSharedGroup(string, bool, string) (*SharedGroup, error) SetSharedGroup(*SharedGroup, string) error - GetActionTriggers(string, bool, string) (ActionTriggers, error) + GetActionTriggersDrv(string) (ActionTriggers, error) SetActionTriggers(string, ActionTriggers, string) error RemoveActionTriggers(string, string) error GetActionPlan(string, bool, string) (*ActionPlan, error) diff --git a/engine/storage_map.go b/engine/storage_map.go index cf7eed08d..3ccf80ff8 100755 --- a/engine/storage_map.go +++ b/engine/storage_map.go @@ -832,26 +832,15 @@ func (ms *MapStorage) AddLoadHistory(*utils.LoadInstance, int, string) error { return nil } -func (ms *MapStorage) GetActionTriggers(key string, skipCache bool, transactionID string) (atrs ActionTriggers, err error) { +func (ms *MapStorage) GetActionTriggersDrv(key string) (atrs ActionTriggers, err error) { ms.mu.RLock() defer ms.mu.RUnlock() - cCommit := cacheCommit(transactionID) key = utils.ACTION_TRIGGER_PREFIX + key - if !skipCache { - if x, ok := cache.Get(key); ok { - if x != nil { - return x.(ActionTriggers), nil - } - return nil, utils.ErrNotFound - } - } if values, ok := ms.dict[key]; ok { err = ms.ms.Unmarshal(values, &atrs) } else { - cache.Set(key, nil, cCommit, transactionID) return nil, utils.ErrNotFound } - cache.Set(key, atrs, cCommit, transactionID) return } diff --git a/engine/storage_mongo_datadb.go b/engine/storage_mongo_datadb.go index 987f2af62..16475ed8f 100755 --- a/engine/storage_mongo_datadb.go +++ b/engine/storage_mongo_datadb.go @@ -1410,17 +1410,7 @@ func (ms *MongoStorage) AddLoadHistory(ldInst *utils.LoadInstance, loadHistSize return err } -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(cacheKey); ok { - if x != nil { - return x.(ActionTriggers), nil - } - return nil, utils.ErrNotFound - } - } - +func (ms *MongoStorage) GetActionTriggersDrv(key string) (atrs ActionTriggers, err error) { var kv struct { Key string Value ActionTriggers @@ -1429,13 +1419,11 @@ func (ms *MongoStorage) GetActionTriggers(key string, skipCache bool, transactio defer session.Close() 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 } atrs = kv.Value - cache.Set(cacheKey, atrs, cacheCommit(transactionID), transactionID) return } diff --git a/engine/storage_redis.go b/engine/storage_redis.go index e4a56a536..655a4ebd0 100755 --- a/engine/storage_redis.go +++ b/engine/storage_redis.go @@ -930,20 +930,11 @@ func (rs *RedisStorage) AddLoadHistory(ldInst *utils.LoadInstance, loadHistSize return err } -func (rs *RedisStorage) GetActionTriggers(key string, skipCache bool, transactionID string) (atrs ActionTriggers, err error) { +func (rs *RedisStorage) GetActionTriggersDrv(key string) (atrs ActionTriggers, err error) { key = utils.ACTION_TRIGGER_PREFIX + key - if !skipCache { - if x, ok := cache.Get(key); ok { - if x == nil { - return nil, utils.ErrNotFound - } - return x.(ActionTriggers), nil - } - } var values []byte if values, err = rs.Cmd("GET", key).Bytes(); err != nil { if err == redis.ErrRespNil { // did not find the destination - cache.Set(key, nil, cacheCommit(transactionID), transactionID) err = utils.ErrNotFound } return @@ -951,7 +942,6 @@ func (rs *RedisStorage) GetActionTriggers(key string, skipCache bool, transactio if err = rs.ms.Unmarshal(values, &atrs); err != nil { return } - cache.Set(key, atrs, cacheCommit(transactionID), transactionID) return }