From 9f68b27b27e1d69ea996c2e3df58f194be2e15bc Mon Sep 17 00:00:00 2001 From: TeoV Date: Fri, 20 Oct 2017 17:54:56 +0300 Subject: [PATCH] Add GetActions in DataManager --- apier/v1/apier.go | 2 +- apier/v2/apier.go | 2 +- engine/action_plan.go | 2 +- engine/action_trigger.go | 2 +- engine/actions_test.go | 10 +++++----- engine/datamanager.go | 27 ++++++++++++++++++++++++++- engine/loader_it_test.go | 2 +- engine/onstor_it_test.go | 6 +++--- engine/storage_interface.go | 2 +- engine/storage_map.go | 16 +--------------- engine/storage_mongo_datadb.go | 16 +--------------- engine/storage_redis.go | 15 +-------------- 12 files changed, 43 insertions(+), 59 deletions(-) diff --git a/apier/v1/apier.go b/apier/v1/apier.go index 4778b7635..6971e7cb8 100644 --- a/apier/v1/apier.go +++ b/apier/v1/apier.go @@ -570,7 +570,7 @@ func (self *ApierV1) GetActions(actsId string, reply *[]*utils.TPAction) error { return fmt.Errorf("%s ActionsId: %s", utils.ErrMandatoryIeMissing.Error(), actsId) } acts := make([]*utils.TPAction, 0) - engActs, err := self.DataManager.DataDB().GetActions(actsId, false, utils.NonTransactional) + engActs, err := self.DataManager.GetActions(actsId, false, utils.NonTransactional) if err != nil { return utils.NewErrServerError(err) } diff --git a/apier/v2/apier.go b/apier/v2/apier.go index 45f13b211..633cc149f 100644 --- a/apier/v2/apier.go +++ b/apier/v2/apier.go @@ -267,7 +267,7 @@ func (self *ApierV2) GetActions(attr AttrGetActions, reply *map[string]engine.Ac retActions := make(map[string]engine.Actions) for _, accKey := range limitedActions { key := accKey[len(utils.ACTION_PREFIX):] - acts, err := self.DataManager.DataDB().GetActions(key, false, utils.NonTransactional) + acts, err := self.DataManager.GetActions(key, false, utils.NonTransactional) if err != nil { return utils.NewErrServerError(err) } diff --git a/engine/action_plan.go b/engine/action_plan.go index 0f6b6d436..5c54236b3 100644 --- a/engine/action_plan.go +++ b/engine/action_plan.go @@ -277,7 +277,7 @@ func (at *ActionTiming) GetActionPlanID() string { func (at *ActionTiming) getActions() (as []*Action, err error) { if at.actions == nil { - at.actions, err = dm.DataDB().GetActions(at.ActionsID, false, utils.NonTransactional) + at.actions, err = dm.GetActions(at.ActionsID, false, utils.NonTransactional) } at.actions.Sort() return at.actions, err diff --git a/engine/action_trigger.go b/engine/action_trigger.go index f5f01c78f..d51d5c1b9 100644 --- a/engine/action_trigger.go +++ b/engine/action_trigger.go @@ -57,7 +57,7 @@ func (at *ActionTrigger) Execute(ub *Account, sq *CDRStatsQueueTriggered) (err e } // does NOT need to Lock() because it is triggered from a method that took the Lock var aac Actions - aac, err = dm.DataDB().GetActions(at.ActionsID, false, utils.NonTransactional) + aac, err = dm.GetActions(at.ActionsID, false, utils.NonTransactional) if err != nil { utils.Logger.Err(fmt.Sprintf("Failed to get actions: %v", err)) return diff --git a/engine/actions_test.go b/engine/actions_test.go index 1bae7be02..1b95d7714 100644 --- a/engine/actions_test.go +++ b/engine/actions_test.go @@ -1130,7 +1130,7 @@ func TestActionTriggerLogging(t *testing.T) { Weight: 10.0, ActionsID: "TEST_ACTIONS", } - as, err := dm.DataDB().GetActions(at.ActionsID, false, utils.NonTransactional) + as, err := dm.GetActions(at.ActionsID, false, utils.NonTransactional) if err != nil { t.Error("Error getting actions for the action timing: ", as, err) } @@ -2137,7 +2137,7 @@ func TestActionSetBalance(t *testing.T) { } func TestActionCSVFilter(t *testing.T) { - act, err := dm.DataDB().GetActions("FILTER", false, utils.NonTransactional) + act, err := dm.GetActions("FILTER", false, utils.NonTransactional) if err != nil { t.Error("error getting actions: ", err) } @@ -2147,7 +2147,7 @@ func TestActionCSVFilter(t *testing.T) { } func TestActionExpirationTime(t *testing.T) { - a, err := dm.DataDB().GetActions("EXP", false, utils.NonTransactional) + a, err := dm.GetActions("EXP", false, utils.NonTransactional) if err != nil || a == nil { t.Error("Error getting actions: ", err) } @@ -2167,11 +2167,11 @@ func TestActionExpirationTime(t *testing.T) { } func TestActionExpNoExp(t *testing.T) { - exp, err := dm.DataDB().GetActions("EXP", false, utils.NonTransactional) + exp, err := dm.GetActions("EXP", false, utils.NonTransactional) if err != nil || exp == nil { t.Error("Error getting actions: ", err) } - noexp, err := dm.DataDB().GetActions("NOEXP", false, utils.NonTransactional) + noexp, err := dm.GetActions("NOEXP", false, utils.NonTransactional) if err != nil || noexp == nil { t.Error("Error getting actions: ", err) } diff --git a/engine/datamanager.go b/engine/datamanager.go index ab4464419..022336560 100644 --- a/engine/datamanager.go +++ b/engine/datamanager.go @@ -169,7 +169,7 @@ func (dm *DataManager) CacheDataFromDB(prfx string, ids []string, mustBeCached b case utils.RATING_PROFILE_PREFIX: _, err = dm.DataDB().GetRatingProfile(dataID, true, utils.NonTransactional) case utils.ACTION_PREFIX: - _, err = dm.DataDB().GetActions(dataID, true, utils.NonTransactional) + _, err = dm.GetActions(dataID, true, utils.NonTransactional) case utils.ACTION_PLAN_PREFIX: _, err = dm.DataDB().GetActionPlan(dataID, true, utils.NonTransactional) case utils.AccountActionPlansPrefix: @@ -620,3 +620,28 @@ func (dm *DataManager) GetDerivedChargers(key string, skipCache bool, transactio cache.Set(cacheKey, dcs, cacheCommit(transactionID), transactionID) return } + +func (dm *DataManager) GetActions(key string, skipCache bool, transactionID string) (as Actions, err error) { + cachekey := utils.ACTION_PREFIX + key + if !skipCache { + if x, err := cache.GetCloned(cachekey); err != nil { + if err.Error() != utils.ItemNotFound { + return nil, err + } + } else if x == nil { + return nil, utils.ErrNotFound + } else { + return x.(Actions), nil + } + } + as, err = dm.DataDB().GetActionsDrv(key) + if err != nil { + if err == utils.ErrNotFound { + cache.Set(cachekey, nil, cacheCommit(transactionID), transactionID) + } + return nil, err + } + cache.Set(cachekey, as, cacheCommit(transactionID), transactionID) + return + +} diff --git a/engine/loader_it_test.go b/engine/loader_it_test.go index 7c5425603..9c480ce41 100755 --- a/engine/loader_it_test.go +++ b/engine/loader_it_test.go @@ -171,7 +171,7 @@ func TestLoaderITLoadFromCSV(t *testing.T) { func TestLoaderITWriteToDatabase(t *testing.T) { for k, as := range loader.actions { - rcv, err := loader.dataStorage.GetActions(k, true, utils.NonTransactional) + rcv, err := loader.dm.GetActions(k, true, utils.NonTransactional) if err != nil { t.Error("Failed GetActions: ", err.Error()) } diff --git a/engine/onstor_it_test.go b/engine/onstor_it_test.go index 07ba81755..295a4c1e9 100644 --- a/engine/onstor_it_test.go +++ b/engine/onstor_it_test.go @@ -1307,13 +1307,13 @@ func testOnStorITCRUDActions(t *testing.T) { }, }, } - if _, rcvErr := onStor.DataDB().GetActions(acts[0].Id, true, utils.NonTransactional); rcvErr != utils.ErrNotFound { + if _, rcvErr := onStor.GetActions(acts[0].Id, true, utils.NonTransactional); rcvErr != utils.ErrNotFound { t.Error(rcvErr) } if err := onStor.DataDB().SetActions(acts[0].Id, acts, utils.NonTransactional); err != nil { t.Error(err) } - if rcv, err := onStor.DataDB().GetActions(acts[0].Id, true, utils.NonTransactional); err != nil { + if rcv, err := onStor.GetActions(acts[0].Id, true, utils.NonTransactional); err != nil { t.Error(err) } else if !reflect.DeepEqual(acts[0], rcv[0]) { t.Errorf("Expecting: %v, received: %v", acts[0], rcv[0]) @@ -1338,7 +1338,7 @@ func testOnStorITCRUDActions(t *testing.T) { if err := onStor.DataDB().RemoveActions(acts[0].Id, utils.NonTransactional); err != nil { t.Error(err) } - if _, rcvErr := onStor.DataDB().GetActions(acts[0].Id, true, utils.NonTransactional); rcvErr != utils.ErrNotFound { + if _, rcvErr := onStor.GetActions(acts[0].Id, true, utils.NonTransactional); rcvErr != utils.ErrNotFound { t.Error(rcvErr) } diff --git a/engine/storage_interface.go b/engine/storage_interface.go index 966e3fe2f..412ad29da 100755 --- a/engine/storage_interface.go +++ b/engine/storage_interface.go @@ -66,7 +66,7 @@ type DataDB interface { GetAllCdrStats() ([]*CdrStats, error) GetDerivedChargersDrv(string) (*utils.DerivedChargers, error) SetDerivedChargers(string, *utils.DerivedChargers, string) error - GetActions(string, bool, string) (Actions, error) + GetActionsDrv(string) (Actions, error) SetActions(string, Actions, string) error RemoveActions(string, string) error GetSharedGroupDrv(string) (*SharedGroup, error) diff --git a/engine/storage_map.go b/engine/storage_map.go index d92f75c79..a9a6de3c1 100755 --- a/engine/storage_map.go +++ b/engine/storage_map.go @@ -471,29 +471,15 @@ func (ms *MapStorage) UpdateReverseDestination(oldDest, newDest *Destination, tr return err } -func (ms *MapStorage) GetActions(key string, skipCache bool, transactionID string) (as Actions, err error) { +func (ms *MapStorage) GetActionsDrv(key string) (as Actions, err error) { ms.mu.RLock() defer ms.mu.RUnlock() - cCommit := cacheCommit(transactionID) cachekey := utils.ACTION_PREFIX + key - if !skipCache { - if x, err := cache.GetCloned(cachekey); err != nil { - if err.Error() != utils.ItemNotFound { - return nil, err - } - } else if x == nil { - return nil, utils.ErrNotFound - } else { - return x.(Actions), nil - } - } if values, ok := ms.dict[cachekey]; ok { err = ms.ms.Unmarshal(values, &as) } else { - cache.Set(cachekey, nil, cCommit, transactionID) return nil, utils.ErrNotFound } - cache.Set(cachekey, as, cCommit, transactionID) return } diff --git a/engine/storage_mongo_datadb.go b/engine/storage_mongo_datadb.go index 97f18921d..5f26bd6e7 100755 --- a/engine/storage_mongo_datadb.go +++ b/engine/storage_mongo_datadb.go @@ -957,19 +957,7 @@ func (ms *MongoStorage) UpdateReverseDestination(oldDest, newDest *Destination, return nil } -func (ms *MongoStorage) GetActions(key string, skipCache bool, transactionID string) (as Actions, err error) { - cacheKey := utils.ACTION_PREFIX + key - if !skipCache { - if x, err := cache.GetCloned(cacheKey); err != nil { - if err.Error() != utils.ItemNotFound { - return nil, err - } - } else if x == nil { - return nil, utils.ErrNotFound - } else { - return x.(Actions), nil - } - } +func (ms *MongoStorage) GetActionsDrv(key string) (as Actions, err error) { var result struct { Key string Value Actions @@ -978,13 +966,11 @@ func (ms *MongoStorage) GetActions(key string, skipCache bool, transactionID str defer session.Close() if err = col.Find(bson.M{"key": key}).One(&result); err != nil { if err == mgo.ErrNotFound { - cache.Set(cacheKey, nil, cacheCommit(transactionID), transactionID) err = utils.ErrNotFound } return nil, err } as = result.Value - cache.Set(utils.ACTION_PREFIX+key, as, cacheCommit(transactionID), transactionID) return } diff --git a/engine/storage_redis.go b/engine/storage_redis.go index 65ab9f199..eec3286b8 100755 --- a/engine/storage_redis.go +++ b/engine/storage_redis.go @@ -519,23 +519,11 @@ func (rs *RedisStorage) UpdateReverseDestination(oldDest, newDest *Destination, return nil } -func (rs *RedisStorage) GetActions(key string, skipCache bool, transactionID string) (as Actions, err error) { +func (rs *RedisStorage) GetActionsDrv(key string) (as Actions, err error) { key = utils.ACTION_PREFIX + key - if !skipCache { - if x, err := cache.GetCloned(key); err != nil { - if err.Error() != utils.ItemNotFound { - return nil, err - } - } else if x == nil { - return nil, utils.ErrNotFound - } else { - return x.(Actions), 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 @@ -543,7 +531,6 @@ func (rs *RedisStorage) GetActions(key string, skipCache bool, transactionID str if err = rs.ms.Unmarshal(values, &as); err != nil { return } - cache.Set(key, as, cacheCommit(transactionID), transactionID) return }