Remove reverse filter indexes

This commit is contained in:
adi
2022-12-07 16:30:43 +02:00
committed by Dan Christian Bogos
parent a9f0a3244a
commit 4ec5e420b0
4 changed files with 119 additions and 12 deletions

View File

@@ -110,6 +110,8 @@ func (api *APIerSv1) GetFilterIndexes(arg AttrGetFilterIndexes, reply *[]string)
}
arg.ItemType = utils.AttributeProfilePrefix
key = utils.ConcatenatedKey(arg.Tenant, arg.Context)
case utils.CacheReverseFilterIndexes:
arg.ItemType = utils.ReverseFilterIndexes
}
if indexes, err = api.DataManager.GetFilterIndexes(
utils.PrefixToIndexCache[arg.ItemType], key, "", nil); err != nil {

View File

@@ -2195,6 +2195,10 @@ func (dm *DataManager) RemoveChargerProfile(tenant, id string,
tenant).RemoveItemFromIndex(tenant, id, oldCpp.FilterIDs); err != nil {
return
}
if err = removeReverseFilterIndexForFilter(dm, utils.CacheChargerFilterIndexes, utils.EmptyString,
oldCpp.Tenant, oldCpp.ID, oldCpp.FilterIDs); err != nil {
return
}
}
if config.CgrConfig().DataDbCfg().Items[utils.MetaChargerProfiles].Replicate {
var reply string

View File

@@ -19,7 +19,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
package engine
import (
"fmt"
"strings"
"github.com/cgrates/cgrates/config"
@@ -48,7 +47,6 @@ func addReverseFilterIndexForFilter(dm *DataManager, idxItmType, ctx, tnt,
var indexes map[string]utils.StringMap
if indexes, err = dm.GetFilterIndexes(utils.PrefixToIndexCache[utils.ReverseFilterIndexes], tntFltrID,
utils.EmptyString, nil); err != nil {
utils.Logger.Crit(fmt.Sprintf("err: %v", err))
if err != utils.ErrNotFound {
guardian.Guardian.UnguardIDs(refID)
return
@@ -95,14 +93,14 @@ func removeReverseFilterIndexForFilter(dm *DataManager, idxItmType, ctx, tnt, it
err = nil
continue // already removed
}
delete(indexes[idxItmType], itemID) // delete index from map
indexerKey := tnt
indexerKey := utils.ConcatenatedKey(tnt, fltrID)
if ctx != utils.EmptyString {
indexerKey = utils.ConcatenatedKey(tnt, ctx)
}
fltrIndexer := NewFilterIndexer(dm, utils.ReverseFilterIndexes, indexerKey)
fltrIndexer.indexes = indexes
if err = fltrIndexer.StoreIndexes(true, utils.NonTransactional); err != nil {
guardian.Guardian.UnguardIDs(refID)
return

View File

@@ -111,7 +111,10 @@ var (
testFilterIndexesCasesComputeChargersIndexes,
testFilterIndexesCasesGetChargerIndexesChanged,
testFilterIndexesCasesGetReverseFilterIndexes,
testFilterIndexesCasesGetReverseFilterIndexes, // for chargers
testFilterIndexesCasesRemoveChargerProfile,
testFilterIndexesCasesGetIndexesAfterRemove,
testFilterIndexesCasesGetReverseIndexesAfterRemove,
testFilterIndexesCasesStopEngine,
}
@@ -659,16 +662,12 @@ func testFilterIndexesCasesGetChargerIndexesChanged(t *testing.T) {
func testFilterIndexesCasesGetReverseFilterIndexes(t *testing.T) {
arg := &v1.AttrGetFilterIndexes{
Tenant: "cgrates.org",
Tenant: "cgrates.org:FLTR_Charger",
ItemType: utils.CacheReverseFilterIndexes,
}
expectedIndexes := []string{
/* "*string:~*req.Account:12345:ChrgerIndexable",
"*string:~*req.Account:12345:ChrgerIndexable222",
"*prefix:~*req.SetupTime:2022:ChrgerIndexable",
"*string:~*req.Destination:1443:ChrgerIndexable",
"*string:~*req.RequestType:*none:ChrgerIndexable",
"*string:~*req.RequestType:*none:ChrgerIndexable222", */
"*charger_filter_indexes:ChrgerIndexable",
"*charger_filter_indexes:ChrgerIndexable222",
}
sort.Strings(expectedIndexes)
var reply []string
@@ -677,6 +676,110 @@ func testFilterIndexesCasesGetReverseFilterIndexes(t *testing.T) {
} else if sort.Strings(reply); !reflect.DeepEqual(expectedIndexes, reply) {
t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(expectedIndexes), utils.ToJSON(reply))
}
arg = &v1.AttrGetFilterIndexes{
Tenant: "cgrates.org:FLTR_Charger4564",
ItemType: utils.CacheReverseFilterIndexes,
}
expectedIndexes = []string{
"*charger_filter_indexes:ChrgerIndexable",
"*charger_filter_indexes:ChrgerIndexable222",
}
sort.Strings(expectedIndexes)
if err := fIdxCasesRPC.Call(utils.APIerSv1GetFilterIndexes, arg, &reply); err != nil {
t.Error(err)
} else if sort.Strings(reply); !reflect.DeepEqual(expectedIndexes, reply) {
t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(expectedIndexes), utils.ToJSON(reply))
}
arg = &v1.AttrGetFilterIndexes{
Tenant: "cgrates.org:FLTR_Charger12312",
ItemType: utils.CacheReverseFilterIndexes,
}
expectedIndexes = []string{
"*charger_filter_indexes:ChrgerIndexable",
}
sort.Strings(expectedIndexes)
if err := fIdxCasesRPC.Call(utils.APIerSv1GetFilterIndexes, arg, &reply); err != nil {
t.Error(err)
} else if sort.Strings(reply); !reflect.DeepEqual(expectedIndexes, reply) {
t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(expectedIndexes), utils.ToJSON(reply))
}
}
func testFilterIndexesCasesRemoveChargerProfile(t *testing.T) {
var resp string
if err := fIdxCasesRPC.Call(utils.APIerSv1RemoveChargerProfile,
&utils.TenantID{Tenant: "cgrates.org", ID: "ChrgerIndexable222"}, &resp); err != nil {
t.Error(err)
} else if resp != utils.OK {
t.Error("Unexpected reply returned", resp)
}
}
func testFilterIndexesCasesGetIndexesAfterRemove(t *testing.T) {
arg := &v1.AttrGetFilterIndexes{
Tenant: "cgrates.org",
ItemType: utils.MetaChargers,
}
expectedIndexes := []string{
"*string:~*req.Account:12345:ChrgerIndexable",
"*prefix:~*req.SetupTime:2022:ChrgerIndexable",
"*string:~*req.Destination:1443:ChrgerIndexable",
"*string:~*req.RequestType:*none:ChrgerIndexable",
}
sort.Strings(expectedIndexes)
var reply []string
if err := fIdxCasesRPC.Call(utils.APIerSv1GetFilterIndexes, arg, &reply); err != nil {
t.Error(err)
} else if sort.Strings(reply); !reflect.DeepEqual(expectedIndexes, reply) {
t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(expectedIndexes), utils.ToJSON(reply))
}
}
func testFilterIndexesCasesGetReverseIndexesAfterRemove(t *testing.T) {
arg := &v1.AttrGetFilterIndexes{
Tenant: "cgrates.org:FLTR_Charger",
ItemType: utils.CacheReverseFilterIndexes,
}
expectedIndexes := []string{
"*charger_filter_indexes:ChrgerIndexable",
}
sort.Strings(expectedIndexes)
var reply []string
if err := fIdxCasesRPC.Call(utils.APIerSv1GetFilterIndexes, arg, &reply); err != nil {
t.Error(err)
} else if sort.Strings(reply); !reflect.DeepEqual(expectedIndexes, reply) {
t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(expectedIndexes), utils.ToJSON(reply))
}
arg = &v1.AttrGetFilterIndexes{
Tenant: "cgrates.org:FLTR_Charger4564",
ItemType: utils.CacheReverseFilterIndexes,
}
expectedIndexes = []string{
"*charger_filter_indexes:ChrgerIndexable",
}
sort.Strings(expectedIndexes)
if err := fIdxCasesRPC.Call(utils.APIerSv1GetFilterIndexes, arg, &reply); err != nil {
t.Error(err)
} else if sort.Strings(reply); !reflect.DeepEqual(expectedIndexes, reply) {
t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(expectedIndexes), utils.ToJSON(reply))
}
arg = &v1.AttrGetFilterIndexes{
Tenant: "cgrates.org:FLTR_Charger12312",
ItemType: utils.CacheReverseFilterIndexes,
}
expectedIndexes = []string{
"*charger_filter_indexes:ChrgerIndexable",
}
sort.Strings(expectedIndexes)
if err := fIdxCasesRPC.Call(utils.APIerSv1GetFilterIndexes, arg, &reply); err != nil {
t.Error(err)
} else if sort.Strings(reply); !reflect.DeepEqual(expectedIndexes, reply) {
t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(expectedIndexes), utils.ToJSON(reply))
}
}
func testFilterIndexesCasesStopEngine(t *testing.T) {