diff --git a/apier/v1/filter_indexes.go b/apier/v1/filter_indexes.go index 020e3cbf9..45f83757b 100644 --- a/apier/v1/filter_indexes.go +++ b/apier/v1/filter_indexes.go @@ -323,7 +323,7 @@ func (self *ApierV1) computeThresholdIndexes(tenant string, thIDs *[]string, }, } } else if fltr, err = self.DataManager.GetFilter(th.Tenant, fltrID, - false, utils.NonTransactional); err != nil { + true, false, utils.NonTransactional); err != nil { if err == utils.ErrNotFound { err = fmt.Errorf("broken reference to filter: %+v for threshold: %+v", fltrID, th) @@ -391,7 +391,7 @@ func (self *ApierV1) computeAttributeIndexes(tenant, context string, attrIDs *[] }, } } else if fltr, err = self.DataManager.GetFilter(ap.Tenant, fltrID, - false, utils.NonTransactional); err != nil { + true, false, utils.NonTransactional); err != nil { if err == utils.ErrNotFound { err = fmt.Errorf("broken reference to filter: %+v for attribute: %+v", fltrID, ap) @@ -458,7 +458,7 @@ func (self *ApierV1) computeResourceIndexes(tenant string, rsIDs *[]string, }, } } else if fltr, err = self.DataManager.GetFilter(rp.Tenant, fltrID, - false, utils.NonTransactional); err != nil { + true, false, utils.NonTransactional); err != nil { if err == utils.ErrNotFound { err = fmt.Errorf("broken reference to filter: %+v for resource: %+v", fltrID, rp) @@ -525,7 +525,7 @@ func (self *ApierV1) computeStatIndexes(tenant string, stIDs *[]string, }, } } else if fltr, err = self.DataManager.GetFilter(sqp.Tenant, fltrID, - false, utils.NonTransactional); err != nil { + true, false, utils.NonTransactional); err != nil { if err == utils.ErrNotFound { err = fmt.Errorf("broken reference to filter: %+v for statqueue: %+v", fltrID, sqp) @@ -592,7 +592,7 @@ func (self *ApierV1) computeSupplierIndexes(tenant string, sppIDs *[]string, }, } } else if fltr, err = self.DataManager.GetFilter(spp.Tenant, fltrID, - false, utils.NonTransactional); err != nil { + true, false, utils.NonTransactional); err != nil { if err == utils.ErrNotFound { err = fmt.Errorf("broken reference to filter: %+v for suppliers: %+v", fltrID, spp) @@ -659,7 +659,7 @@ func (self *ApierV1) computeChargerIndexes(tenant string, cppIDs *[]string, }, } } else if fltr, err = self.DataManager.GetFilter(cpp.Tenant, fltrID, - false, utils.NonTransactional); err != nil { + true, false, utils.NonTransactional); err != nil { if err == utils.ErrNotFound { err = fmt.Errorf("broken reference to filter: %+v for charger: %+v", fltrID, cpp) diff --git a/apier/v1/filters.go b/apier/v1/filters.go index 7a6d688c4..342317689 100644 --- a/apier/v1/filters.go +++ b/apier/v1/filters.go @@ -40,7 +40,7 @@ func (self *ApierV1) GetFilter(arg utils.TenantID, reply *engine.Filter) error { if missing := utils.MissingStructFields(&arg, []string{"Tenant", "ID"}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } - if fltr, err := self.DataManager.GetFilter(arg.Tenant, arg.ID, false, utils.NonTransactional); err != nil { + if fltr, err := self.DataManager.GetFilter(arg.Tenant, arg.ID, true, true, utils.NonTransactional); err != nil { if err.Error() != utils.ErrNotFound.Error() { err = utils.NewErrServerError(err) } diff --git a/engine/chargers_test.go b/engine/chargers_test.go index 45b9e5aa7..e023bb76c 100755 --- a/engine/chargers_test.go +++ b/engine/chargers_test.go @@ -105,7 +105,7 @@ func TestChargerPopulateChargerService(t *testing.T) { t.Errorf("Error: %+v", err) } chargerSrv, err = NewChargerService(dmCharger, - &FilterS{dm: dmAtr, cfg: defaultCfg}, nil, defaultCfg) + &FilterS{dm: dmCharger, cfg: defaultCfg}, nil, defaultCfg) if err != nil { t.Errorf("Error: %+v", err) } @@ -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, - true, true, utils.NonTransactional); err != nil { + true, false, utils.NonTransactional); err != nil { t.Errorf("Error: %+v", err) } else if !reflect.DeepEqual(cp, tempCp) { t.Errorf("Expecting: %+v, received: %+v", cp, tempCp) @@ -190,19 +190,15 @@ func TestChargerMatchingChargerProfilesForEvent(t *testing.T) { t.Errorf("Error: %+v", err) } - rcv, err := chargerSrv.matchingChargerProfilesForEvent(chargerEvents[0]) - if err != nil { + if rcv, err := chargerSrv.matchingChargerProfilesForEvent(chargerEvents[0]); err != nil { t.Errorf("Error: %+v", err) - } - if !reflect.DeepEqual(cPPs[0], rcv[0]) { + } else if !reflect.DeepEqual(cPPs[0], rcv[0]) { t.Errorf("Expecting: %+v, received: %+v ", cPPs[0], rcv[0]) } - rcv, err = chargerSrv.matchingChargerProfilesForEvent(chargerEvents[1]) - if err != nil { + if rcv, err := chargerSrv.matchingChargerProfilesForEvent(chargerEvents[1]); err != nil { t.Errorf("Error: %+v", err) - } - if !reflect.DeepEqual(cPPs[1], rcv[0]) { + } else if !reflect.DeepEqual(cPPs[1], rcv[0]) { t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(cPPs[1]), utils.ToJSON(rcv)) } diff --git a/engine/datamanager.go b/engine/datamanager.go index e7d0d6b21..943cd6dc3 100644 --- a/engine/datamanager.go +++ b/engine/datamanager.go @@ -235,7 +235,7 @@ func (dm *DataManager) CacheDataFromDB(prfx string, ids []string, mustBeCached b _, err = dm.GetThreshold(tntID.Tenant, tntID.ID, false, true, utils.NonTransactional) case utils.FilterPrefix: tntID := utils.NewTenantID(dataID) - _, err = dm.GetFilter(tntID.Tenant, tntID.ID, true, utils.NonTransactional) + _, err = dm.GetFilter(tntID.Tenant, tntID.ID, false, true, utils.NonTransactional) case utils.SupplierProfilePrefix: tntID := utils.NewTenantID(dataID) _, err = dm.GetSupplierProfile(tntID.Tenant, tntID.ID, false, true, utils.NonTransactional) @@ -310,10 +310,10 @@ func (dm *DataManager) RemoveStatQueue(tenant, id string, transactionID string) } // GetFilter returns -func (dm *DataManager) GetFilter(tenant, id string, - skipCache bool, transactionID string) (fltr *Filter, err error) { +func (dm *DataManager) GetFilter(tenant, id string, cacheRead, cacheWrite bool, + transactionID string) (fltr *Filter, err error) { tntID := utils.ConcatenatedKey(tenant, id) - if !skipCache { + if cacheRead { if x, ok := Cache.Get(utils.CacheFilters, tntID); ok { if x == nil { return nil, utils.ErrNotFound @@ -324,17 +324,21 @@ func (dm *DataManager) GetFilter(tenant, id string, if strings.HasPrefix(id, utils.Meta) { fltr, err = NewFilterFromInline(tenant, id) } else { - fltr, err = dm.dataDB.GetFilterDrv(tenant, id) + fltr, err = dm.DataDB().GetFilterDrv(tenant, id) } if err != nil { if err == utils.ErrNotFound { - Cache.Set(utils.CacheFilters, tntID, nil, nil, - cacheCommit(transactionID), transactionID) + if cacheWrite { + Cache.Set(utils.CacheFilters, tntID, nil, nil, + cacheCommit(transactionID), transactionID) + } } return nil, err } - Cache.Set(utils.CacheFilters, tntID, fltr, nil, - cacheCommit(transactionID), transactionID) + if cacheWrite { + Cache.Set(utils.CacheFilters, tntID, fltr, nil, + cacheCommit(transactionID), transactionID) + } return } diff --git a/engine/filterindexer.go b/engine/filterindexer.go index df69e9c65..e5eb30b53 100644 --- a/engine/filterindexer.go +++ b/engine/filterindexer.go @@ -224,7 +224,7 @@ func (rfi *FilterIndexer) RemoveItemFromIndex(tenant, itemID string, oldFilters }, } } else if fltr, err = rfi.dm.GetFilter(tenant, fltrID, - false, utils.NonTransactional); err != nil { + true, false, utils.NonTransactional); err != nil { if err == utils.ErrNotFound { err = fmt.Errorf("broken reference to filter: %+v for itemType: %+v and ID: %+v", fltrID, rfi.itemType, itemID) @@ -285,7 +285,7 @@ func createAndIndex(itemPrefix, tenant, context, itemID string, filterIDs []stri }, } } else if fltr, err = dm.GetFilter(tenant, fltrID, - false, utils.NonTransactional); err != nil { + true, false, utils.NonTransactional); err != nil { if err == utils.ErrNotFound { err = fmt.Errorf("broken reference to filter: %+v for itemType: %+v and ID: %+v", fltrID, itemPrefix, itemID) diff --git a/engine/filters.go b/engine/filters.go index d7999409c..bddfec641 100644 --- a/engine/filters.go +++ b/engine/filters.go @@ -85,7 +85,7 @@ func (fS *FilterS) Pass(tenant string, filterIDs []string, } for _, fltrID := range filterIDs { f, err := fS.dm.GetFilter(tenant, fltrID, - false, utils.NonTransactional) + true, true, utils.NonTransactional) if err != nil { return false, err } diff --git a/engine/onstor_it_test.go b/engine/onstor_it_test.go index 0817dc8fd..9ea18eee4 100644 --- a/engine/onstor_it_test.go +++ b/engine/onstor_it_test.go @@ -2280,7 +2280,7 @@ func testOnStorITFilter(t *testing.T) { }, } if _, rcvErr := onStor.GetFilter("cgrates.org", "Filter1", - false, utils.NonTransactional); rcvErr != nil && rcvErr != utils.ErrNotFound { + true, false, utils.NonTransactional); rcvErr != nil && rcvErr != utils.ErrNotFound { t.Error(rcvErr) } if err := onStor.SetFilter(fp); err != nil { @@ -2288,14 +2288,14 @@ func testOnStorITFilter(t *testing.T) { } //get from cache if rcv, err := onStor.GetFilter("cgrates.org", "Filter1", - false, utils.NonTransactional); err != nil { + true, false, utils.NonTransactional); err != nil { t.Error(err) } else if !(reflect.DeepEqual(fp, rcv)) { t.Errorf("Expecting: %v, received: %v", fp, rcv) } //get from database if rcv, err := onStor.GetFilter("cgrates.org", "Filter1", - true, utils.NonTransactional); err != nil { + false, false, utils.NonTransactional); err != nil { t.Error(err) } else if !(reflect.DeepEqual(fp, rcv)) { t.Errorf("Expecting: %v, received: %v", fp, rcv) @@ -2325,14 +2325,14 @@ func testOnStorITFilter(t *testing.T) { time.Sleep(sleepDelay) //get from cache if rcv, err := onStor.GetFilter("cgrates.org", "Filter1", - false, utils.NonTransactional); err != nil { + true, false, utils.NonTransactional); err != nil { t.Error(err) } else if !(reflect.DeepEqual(fp, rcv)) { t.Errorf("Expecting: %v, received: %v", fp, rcv) } //get from database if rcv, err := onStor.GetFilter("cgrates.org", "Filter1", - true, utils.NonTransactional); err != nil { + false, false, utils.NonTransactional); err != nil { t.Error(err) } else if !(reflect.DeepEqual(fp, rcv)) { t.Errorf("Expecting: %v, received: %v", fp, rcv) @@ -2342,12 +2342,12 @@ func testOnStorITFilter(t *testing.T) { } //check cache if removed if _, rcvErr := onStor.GetFilter("cgrates.org", "Filter1", - 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.GetFilter("cgrates.org", "Filter1", - true, utils.NonTransactional); rcvErr != nil && rcvErr != utils.ErrNotFound { + false, false, utils.NonTransactional); rcvErr != nil && rcvErr != utils.ErrNotFound { t.Error(rcvErr) } } diff --git a/loaders/loader_test.go b/loaders/loader_test.go index 0f6202d7d..656318798 100644 --- a/loaders/loader_test.go +++ b/loaders/loader_test.go @@ -454,14 +454,14 @@ cgrates.org,FLTR_ACNT_1002,*string,Account,1002,2014-07-29T15:00:00Z t.Errorf("wrong buffer content: %+v", ldr.bufLoaderData) } if fltr, err := ldr.dm.GetFilter("cgrates.org", "FLTR_1", - false, utils.NonTransactional); err != nil { + true, true, utils.NonTransactional); err != nil { t.Error(err) } else if !reflect.DeepEqual(eFltr1, fltr) { t.Errorf("expecting: %s, received: %s", utils.ToJSON(eFltr1), utils.ToJSON(fltr)) } if fltr, err := ldr.dm.GetFilter("cgrates.org", "FLTR_DST_DE", - false, utils.NonTransactional); err != nil { + true, true, utils.NonTransactional); err != nil { t.Error(err) } else if !reflect.DeepEqual(eFltr2, fltr) { t.Errorf("expecting: %s, received: %s", diff --git a/migrator/filters.go b/migrator/filters.go index 9806e44f6..c1a50fdea 100644 --- a/migrator/filters.go +++ b/migrator/filters.go @@ -36,7 +36,7 @@ func (m *Migrator) migrateCurrentRequestFilter() (err error) { } for _, id := range ids { idg := strings.TrimPrefix(id, utils.FilterPrefix+tenant+":") - fl, err := m.dmIN.DataManager().GetFilter(tenant, idg, true, utils.NonTransactional) + fl, err := m.dmIN.DataManager().GetFilter(tenant, idg, false, false, utils.NonTransactional) if err != nil { return err } diff --git a/migrator/stats.go b/migrator/stats.go index db07d4384..4bf1aaef9 100644 --- a/migrator/stats.go +++ b/migrator/stats.go @@ -60,6 +60,7 @@ type v1Stat struct { type v1Stats []*v1Stat func (m *Migrator) migrateCurrentStats() (err error) { + fmt.Println("Ajunge aici ???") var ids []string tenant := config.CgrConfig().DefaultTenant //StatQueue @@ -71,6 +72,7 @@ func (m *Migrator) migrateCurrentStats() (err error) { idg := strings.TrimPrefix(id, utils.StatQueuePrefix+tenant+":") sgs, err := m.dmIN.DataManager().GetStatQueue(tenant, idg, false, false, utils.NonTransactional) if err != nil { + return err } if sgs != nil { diff --git a/migrator/stats_it_test.go b/migrator/stats_it_test.go index 237e5ecc6..036b1c122 100755 --- a/migrator/stats_it_test.go +++ b/migrator/stats_it_test.go @@ -258,7 +258,7 @@ func testStsITMigrateAndMove(t *testing.T) { t.Errorf("Expecting: %+v, received: %+v", sqp, result) } - result1, err := stsMigrator.dmOut.DataManager().DataDB().GetFilterDrv("cgrates.org", v1Sts.Id) + result1, err := stsMigrator.dmOut.DataManager().GetFilter("cgrates.org", v1Sts.Id, false, false, utils.NonTransactional) if err != nil { t.Error("Error when getting Stats ", err.Error()) } @@ -277,12 +277,15 @@ func testStsITMigrateAndMove(t *testing.T) { } case utils.Move: - if err := stsMigrator.dmIN.DataManager().DataDB().SetStatQueueProfileDrv(sqp); err != nil { + if err := stsMigrator.dmIN.DataManager().SetStatQueueProfile(sqp, false); err != nil { t.Error("Error when setting Stats ", err.Error()) } if err := stsMigrator.dmIN.DataManager().SetStatQueue(sq); err != nil { t.Error("Error when setting Stats ", err.Error()) } + if err := stsMigrator.dmOut.DataManager().SetFilter(filter); err != nil { + t.Error("Error when setting Filter ", err.Error()) + } currentVersion := engine.CurrentDataDBVersions() err := stsMigrator.dmOut.DataManager().DataDB().SetVersions(currentVersion, false) if err != nil {