diff --git a/.gitignore b/.gitignore index b4b627791..e31c8e4d3 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ dean* data/vagrant/.vagrant data/vagrant/vagrant_ansible_inventory_default data/tutorials/fs_evsock/freeswitch/etc/freeswitch/ +data/tutorials/sip_redirect/freeswitch/etc/freeswitch/ data/tutorial_tests/fs_evsock/freeswitch/etc/freeswitch/ vendor *.test diff --git a/engine/datamanager.go b/engine/datamanager.go index 7173c30eb..e681d80d5 100644 --- a/engine/datamanager.go +++ b/engine/datamanager.go @@ -541,27 +541,31 @@ func GetFilter(dm *DataManager, tenant, id string, cacheRead, cacheWrite bool, } } if strings.HasPrefix(id, utils.Meta) { - fltr, err = NewFilterFromInline(tenant, id) + if fltr, err = NewFilterFromInline(tenant, id); err != nil { + return + } } else if dm == nil { // in case we want the filter from dataDB but the connection to dataDB a optional (e.g. SessionS) err = utils.ErrNoDatabaseConn return } else { - fltr, err = dm.DataDB().GetFilterDrv(tenant, id) - } - if err != nil { - if err == utils.ErrNotFound && - config.CgrConfig().DataDbCfg().Items[utils.MetaFilters].Remote { - if err = dm.connMgr.Call(config.CgrConfig().DataDbCfg().RmtConns, nil, utils.ReplicatorSv1GetFilter, - &utils.TenantID{Tenant: tenant, ID: id}, &fltr); err == nil { - err = dm.dataDB.SetFilterDrv(fltr) + if fltr, err = dm.DataDB().GetFilterDrv(tenant, id); err != nil { + if err == utils.ErrNotFound && + config.CgrConfig().DataDbCfg().Items[utils.MetaFilters].Remote { + if err = dm.connMgr.Call(config.CgrConfig().DataDbCfg().RmtConns, nil, utils.ReplicatorSv1GetFilter, + &utils.TenantID{Tenant: tenant, ID: id}, &fltr); err == nil { + err = dm.dataDB.SetFilterDrv(fltr) + } + } + if err != nil { + err = utils.CastRPCErr(err) + if err == utils.ErrNotFound && cacheWrite { + Cache.Set(utils.CacheFilters, tntID, nil, nil, + cacheCommit(transactionID), transactionID) + } + return } } - if err != nil { - err = utils.CastRPCErr(err) - if err == utils.ErrNotFound && cacheWrite { - Cache.Set(utils.CacheFilters, tntID, nil, nil, - cacheCommit(transactionID), transactionID) - } + if err = fltr.Compile(); err != nil { // only compile the value when we get the filter from DB or from remote return } } @@ -1813,35 +1817,36 @@ func (dm *DataManager) GetAttributeProfile(tenant, id string, cacheRead, cacheWr } } if isInline { - attrPrfl, err = NewAttributeFromInline(tenant, id) + if attrPrfl, err = NewAttributeFromInline(tenant, id); err != nil { + return + } } else if dm == nil { err = utils.ErrNoDatabaseConn return } else { - attrPrfl, err = dm.dataDB.GetAttributeProfileDrv(tenant, id) - } - if err != nil { - if err == utils.ErrNotFound && - config.CgrConfig().DataDbCfg().Items[utils.MetaAttributeProfiles].Remote { - if err = dm.connMgr.Call(config.CgrConfig().DataDbCfg().RmtConns, nil, - utils.ReplicatorSv1GetAttributeProfile, - &utils.TenantID{Tenant: tenant, ID: id}, &attrPrfl); err == nil { - err = dm.dataDB.SetAttributeProfileDrv(attrPrfl) + if attrPrfl, err = dm.dataDB.GetAttributeProfileDrv(tenant, id); err != nil { + if err == utils.ErrNotFound && + config.CgrConfig().DataDbCfg().Items[utils.MetaAttributeProfiles].Remote { + if err = dm.connMgr.Call(config.CgrConfig().DataDbCfg().RmtConns, nil, + utils.ReplicatorSv1GetAttributeProfile, + &utils.TenantID{Tenant: tenant, ID: id}, &attrPrfl); err == nil { + err = dm.dataDB.SetAttributeProfileDrv(attrPrfl) + } + } + if err != nil { + err = utils.CastRPCErr(err) + if err == utils.ErrNotFound && cacheWrite { + Cache.Set(utils.CacheAttributeProfiles, tntID, nil, nil, + cacheCommit(transactionID), transactionID) + + } + return nil, err } } - if err != nil { - err = utils.CastRPCErr(err) - if err == utils.ErrNotFound && cacheWrite { - Cache.Set(utils.CacheAttributeProfiles, tntID, nil, nil, - cacheCommit(transactionID), transactionID) - - } + if err = attrPrfl.Compile(); err != nil { // only compile the value when we get the attribute from DB or from remote return nil, err } } - if err = attrPrfl.Compile(); err != nil { - return nil, err - } if cacheWrite { Cache.Set(utils.CacheAttributeProfiles, tntID, attrPrfl, nil, cacheCommit(transactionID), transactionID) diff --git a/engine/libattributes.go b/engine/libattributes.go index 3587494ac..069a30c1f 100644 --- a/engine/libattributes.go +++ b/engine/libattributes.go @@ -137,7 +137,7 @@ func NewAttributeFromInline(tenant, inlnRule string) (attr *AttributeProfile, er Tenant: tenant, ID: inlnRule, Contexts: []string{utils.META_ANY}, - Attributes: []*Attribute{&Attribute{ + Attributes: []*Attribute{{ Path: ruleSplt[1], Type: ruleSplt[0], Value: vals, diff --git a/engine/storage_mongo_datadb.go b/engine/storage_mongo_datadb.go index 4f036c0a8..70e59cfdc 100644 --- a/engine/storage_mongo_datadb.go +++ b/engine/storage_mongo_datadb.go @@ -2052,11 +2052,6 @@ func (ms *MongoStorage) GetFilterDrv(tenant, id string) (r *Filter, err error) { }); err != nil { return nil, err } - for _, fltr := range r.Rules { - if err = fltr.CompileValues(); err != nil { - return - } - } return } diff --git a/engine/storage_redis.go b/engine/storage_redis.go index 85396a8bf..4392f5bfa 100644 --- a/engine/storage_redis.go +++ b/engine/storage_redis.go @@ -1469,11 +1469,6 @@ func (rs *RedisStorage) GetFilterDrv(tenant, id string) (r *Filter, err error) { if err = rs.ms.Unmarshal(values, &r); err != nil { return } - for _, fltr := range r.Rules { - if err = fltr.CompileValues(); err != nil { - return - } - } return }