DataManager.GetFilterIndexes with cacheID and itemIDPrefix, utils.CachePrefixToInstance, utils.PrefixToRevIndexCache

This commit is contained in:
DanB
2018-03-02 18:06:33 +01:00
parent 45f638102d
commit d95c5e85b3
13 changed files with 68 additions and 45 deletions

View File

@@ -26,8 +26,10 @@ import (
)
var (
NAT = &Destination{Id: "NAT", Prefixes: []string{"0257", "0256", "0723"}}
RET = &Destination{Id: "RET", Prefixes: []string{"0723", "0724"}}
NAT = &Destination{Id: "NAT",
Prefixes: []string{"0257", "0256", "0723"}}
RET = &Destination{Id: "RET",
Prefixes: []string{"0723", "0724"}}
)
func TestBalanceStoreRestore(t *testing.T) {

View File

@@ -519,9 +519,8 @@ func TestAttributeIndexer(t *testing.T) {
}
rfi1 := NewFilterIndexer(dmAtr, utils.AttributeProfilePrefix,
utils.ConcatenatedKey(attrPrf.Tenant, utils.META_ANY))
if rcvIdx, err := dmAtr.GetFilterIndexes(
GetDBIndexKey(rfi1.itemType, rfi1.dbKeySuffix, false), MetaString,
nil); err != nil {
if rcvIdx, err := dmAtr.GetFilterIndexes(utils.PrefixToIndexCache[rfi1.itemType],
rfi1.dbKeySuffix, MetaString, nil); err != nil {
t.Error(err)
} else {
if !reflect.DeepEqual(eIdxes, rcvIdx) {
@@ -544,9 +543,8 @@ func TestAttributeIndexer(t *testing.T) {
}
rfi2 := NewFilterIndexer(dmAtr, utils.AttributeProfilePrefix,
utils.ConcatenatedKey(attrPrf.Tenant, utils.MetaSessionS))
if rcvIdx, err := dmAtr.GetFilterIndexes(
GetDBIndexKey(rfi2.itemType, rfi2.dbKeySuffix, false), MetaString,
nil); err != nil {
if rcvIdx, err := dmAtr.GetFilterIndexes(utils.PrefixToIndexCache[rfi2.itemType],
rfi2.dbKeySuffix, MetaString, nil); err != nil {
t.Error(err)
} else {
if !reflect.DeepEqual(eIdxes, rcvIdx) {
@@ -563,9 +561,8 @@ func TestAttributeIndexer(t *testing.T) {
}
}
//verify if old index was deleted ( context *any)
if _, err := dmAtr.GetFilterIndexes(
GetDBIndexKey(rfi1.itemType, rfi1.dbKeySuffix, false), MetaString,
nil); err != utils.ErrNotFound {
if _, err := dmAtr.GetFilterIndexes(utils.PrefixToIndexCache[rfi1.itemType],
rfi1.dbKeySuffix, MetaString, nil); err != utils.ErrNotFound {
t.Error(err)
}
if _, err := dmAtr.GetFilterReverseIndexes(

View File

@@ -1107,8 +1107,9 @@ func (dm *DataManager) HasData(category, subject, tenant string) (has bool, err
return dm.DataDB().HasDataDrv(category, subject, tenant)
}
func (dm *DataManager) GetFilterIndexes(dbKey, filterType string, fldNameVal map[string]string) (indexes map[string]utils.StringMap, err error) {
return dm.DataDB().GetFilterIndexesDrv(dbKey, filterType, fldNameVal)
func (dm *DataManager) GetFilterIndexes(cacheID, itemIDPrefix, filterType string,
fldNameVal map[string]string) (indexes map[string]utils.StringMap, err error) {
return dm.DataDB().GetFilterIndexesDrv(cacheID, itemIDPrefix, filterType, fldNameVal)
}
func (dm *DataManager) SetFilterIndexes(dbKey string, indexes map[string]utils.StringMap, commit bool, transactionID string) (err error) {

View File

@@ -159,7 +159,7 @@ func (rfi *FilterIndexer) loadItemReverseIndex(filterType, itemID string) (err e
//Populate FilterIndexer.indexes with specific fieldName:fieldValue , item
func (rfi *FilterIndexer) loadFldNameFldValIndex(filterType, fldName, fldVal string) error {
rcvIdx, err := rfi.dm.GetFilterIndexes(
GetDBIndexKey(rfi.itemType, rfi.dbKeySuffix, false), filterType,
utils.PrefixToIndexCache[rfi.itemType], rfi.dbKeySuffix, filterType,
map[string]string{fldName: fldVal})
if err != nil {
return err

View File

@@ -255,6 +255,8 @@ func (rs Resources) allocateResource(ru *ResourceUsage, dryRun bool) (alcMessage
r.removeExpiredUnits()
if _, hasID := r.Usages[ru.ID]; hasID { // update
r.clearUsage(ru.ID)
if r.rPrf == nil {
return "", fmt.Errorf("empty configuration for resourceID: %s", r.TenantID())
}
if r.rPrf.Limit >= r.totalUsage()+ru.Units {
if alcMessage == "" {

View File

@@ -118,7 +118,7 @@ type DataDB interface {
RemoveTimingDrv(string) error
GetLoadHistory(int, bool, string) ([]*utils.LoadInstance, error)
AddLoadHistory(*utils.LoadInstance, int, string) error
GetFilterIndexesDrv(dbKey, filterType string,
GetFilterIndexesDrv(cacheID, itemIDPrefix, filterType string,
fldNameVal map[string]string) (indexes map[string]utils.StringMap, err error)
SetFilterIndexesDrv(dbKey string, indexes map[string]utils.StringMap,
commit bool, transactionID string) (err error)

View File

@@ -1231,18 +1231,18 @@ func (ms *MapStorage) RemoveTimingDrv(id string) error {
}
//GetFilterIndexesDrv retrieves Indexes from dataDB
func (ms *MapStorage) GetFilterIndexesDrv(dbKey, filterType string,
func (ms *MapStorage) GetFilterIndexesDrv(cacheID, itemIDPrefix, filterType string,
fldNameVal map[string]string) (indexes map[string]utils.StringMap, err error) {
ms.mu.RLock()
defer ms.mu.RUnlock()
dbKey := utils.CacheInstanceToPrefix[cacheID] + itemIDPrefix
values, ok := ms.dict[dbKey]
if !ok {
return nil, utils.ErrNotFound
}
if len(fldNameVal) != 0 {
rcvidx := make(map[string]utils.StringMap)
err = ms.ms.Unmarshal(values, &rcvidx)
if err != nil {
if err = ms.ms.Unmarshal(values, &rcvidx); err != nil {
return nil, err
}
indexes = make(map[string]utils.StringMap)
@@ -1256,8 +1256,7 @@ func (ms *MapStorage) GetFilterIndexesDrv(dbKey, filterType string,
}
return
} else {
err = ms.ms.Unmarshal(values, &indexes)
if err != nil {
if err = ms.ms.Unmarshal(values, &indexes); err != nil {
return nil, err
}
if len(indexes) == 0 {

View File

@@ -1934,7 +1934,7 @@ func (ms *MongoStorage) RemoveTimingDrv(id string) (err error) {
}
// GetFilterIndexesDrv retrieves Indexes from dataDB
func (ms *MongoStorage) GetFilterIndexesDrv(dbKey, filterType string,
func (ms *MongoStorage) GetFilterIndexesDrv(cacheID, itemIDPrefix, filterType string,
fldNameVal map[string]string) (indexes map[string]utils.StringMap, err error) {
session, col := ms.conn(colRFI)
defer session.Close()
@@ -1942,10 +1942,12 @@ func (ms *MongoStorage) GetFilterIndexesDrv(dbKey, filterType string,
Key string
Value map[string][]string
}
dbKey := utils.CacheInstanceToPrefix[cacheID] + itemIDPrefix
findParam := bson.M{"key": dbKey}
if len(fldNameVal) != 0 {
for fldName, fldValue := range fldNameVal {
qryFltr := fmt.Sprintf("value.%s", utils.ConcatenatedKey(filterType, fldName, fldValue))
qryFltr := fmt.Sprintf("value.%s",
utils.ConcatenatedKey(filterType, fldName, fldValue))
if err = col.Find(bson.M{"key": dbKey, qryFltr: bson.M{"$exists": true}}).Select(
bson.M{qryFltr: true}).One(&result); err != nil {
if err == mgo.ErrNotFound {

View File

@@ -1369,9 +1369,10 @@ func (rs *RedisStorage) RemoveTimingDrv(id string) (err error) {
}
//GetFilterIndexesDrv retrieves Indexes from dataDB
func (rs *RedisStorage) GetFilterIndexesDrv(dbKey, filterType string,
func (rs *RedisStorage) GetFilterIndexesDrv(cacheID, itemIDPrefix, filterType string,
fldNameVal map[string]string) (indexes map[string]utils.StringMap, err error) {
mp := make(map[string]string)
dbKey := utils.CacheInstanceToPrefix[cacheID] + itemIDPrefix
if len(fldNameVal) == 0 {
mp, err = rs.Cmd("HGETALL", dbKey).Map()
if err != nil {