From 4da0f5dd0772fb6c94621a1941130b9eadf2eff2 Mon Sep 17 00:00:00 2001 From: DanB Date: Wed, 4 Jan 2017 18:13:09 +0100 Subject: [PATCH] Add reverse destinations and aliases to TpReader reload --- apier/v1/apier.go | 16 ++++++++++++---- apier/v2/apier.go | 8 ++++++-- engine/tp_reader.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 6 deletions(-) diff --git a/apier/v1/apier.go b/apier/v1/apier.go index c85338528..ee4d29ff4 100644 --- a/apier/v1/apier.go +++ b/apier/v1/apier.go @@ -328,7 +328,9 @@ func (self *ApierV1) LoadTariffPlanFromStorDb(attrs AttrLoadTpFromStorDb, reply return utils.NewErrServerError(err) } utils.Logger.Info("ApierV1.LoadTariffPlanFromStorDb, reloading cache.") - for _, prfx := range []string{utils.DESTINATION_PREFIX, + for _, prfx := range []string{ + utils.DESTINATION_PREFIX, + utils.REVERSE_DESTINATION_PREFIX, utils.RATING_PLAN_PREFIX, utils.RATING_PROFILE_PREFIX, utils.ACTION_PREFIX, @@ -342,7 +344,9 @@ func (self *ApierV1) LoadTariffPlanFromStorDb(attrs AttrLoadTpFromStorDb, reply return utils.NewErrServerError(err) } } - for _, prfx := range []string{utils.ALIASES_PREFIX, + for _, prfx := range []string{ + utils.ALIASES_PREFIX, + utils.REVERSE_ALIASES_PREFIX, utils.ResourceLimitsPrefix} { loadedIDs, _ := dbReader.GetLoadedIds(prfx) if err := self.AccountDb.CacheDataFromDB(prfx, loadedIDs, true); err != nil { @@ -1388,7 +1392,9 @@ func (self *ApierV1) LoadTariffPlanFromFolder(attrs utils.AttrLoadTpFromFolder, return utils.NewErrServerError(err) } utils.Logger.Info("ApierV1.LoadTariffPlanFromFolder, reloading cache.") - for _, prfx := range []string{utils.DESTINATION_PREFIX, + for _, prfx := range []string{ + utils.DESTINATION_PREFIX, + utils.REVERSE_DESTINATION_PREFIX, utils.RATING_PLAN_PREFIX, utils.RATING_PROFILE_PREFIX, utils.ACTION_PREFIX, @@ -1402,7 +1408,9 @@ func (self *ApierV1) LoadTariffPlanFromFolder(attrs utils.AttrLoadTpFromFolder, return utils.NewErrServerError(err) } } - for _, prfx := range []string{utils.ALIASES_PREFIX, + for _, prfx := range []string{ + utils.ALIASES_PREFIX, + utils.REVERSE_ALIASES_PREFIX, utils.ResourceLimitsPrefix} { loadedIDs, _ := loader.GetLoadedIds(prfx) if err := self.AccountDb.CacheDataFromDB(prfx, loadedIDs, true); err != nil { diff --git a/apier/v2/apier.go b/apier/v2/apier.go index 40e9d374e..40fb37c7d 100644 --- a/apier/v2/apier.go +++ b/apier/v2/apier.go @@ -163,7 +163,9 @@ func (self *ApierV2) LoadTariffPlanFromFolder(attrs utils.AttrLoadTpFromFolder, } utils.Logger.Info("ApierV2.LoadTariffPlanFromFolder, reloading cache.") - for _, prfx := range []string{utils.DESTINATION_PREFIX, + for _, prfx := range []string{ + utils.DESTINATION_PREFIX, + utils.REVERSE_DESTINATION_PREFIX, utils.RATING_PLAN_PREFIX, utils.RATING_PROFILE_PREFIX, utils.ACTION_PREFIX, @@ -177,7 +179,9 @@ func (self *ApierV2) LoadTariffPlanFromFolder(attrs utils.AttrLoadTpFromFolder, return utils.NewErrServerError(err) } } - for _, prfx := range []string{utils.ALIASES_PREFIX, + for _, prfx := range []string{ + utils.ALIASES_PREFIX, + utils.REVERSE_ALIASES_PREFIX, utils.ResourceLimitsPrefix} { loadedIDs, _ := loader.GetLoadedIds(prfx) if err := self.AccountDb.CacheDataFromDB(prfx, loadedIDs, true); err != nil { diff --git a/engine/tp_reader.go b/engine/tp_reader.go index c5a317a5a..f06a85314 100644 --- a/engine/tp_reader.go +++ b/engine/tp_reader.go @@ -54,6 +54,8 @@ type TpReader struct { users map[string]*UserProfile aliases map[string]*Alias resLimits map[string]*utils.TPResourceLimit + revDests, + revAliases map[string][]string } func NewTpReader(rs RatingStorage, as AccountingStorage, lr LoadReader, tpid, timezone string) *TpReader { @@ -105,6 +107,8 @@ func (tpr *TpReader) Init() { tpr.aliases = make(map[string]*Alias) tpr.derivedChargers = make(map[string]*utils.DerivedChargers) tpr.resLimits = make(map[string]*utils.TPResourceLimit) + tpr.revDests = make(map[string][]string) + tpr.revAliases = make(map[string][]string) } func (tpr *TpReader) LoadDestinationsFiltered(tag string) (bool, error) { @@ -136,6 +140,12 @@ func (tpr *TpReader) LoadDestinations() (err error) { } for _, tpDst := range tps { tpr.destinations[tpDst.Tag] = NewDestinationFromTPDestination(tpDst) + for _, prfx := range tpr.destinations[tpDst.Tag].Prefixes { + if _, hasIt := tpr.revDests[prfx]; !hasIt { + tpr.revDests[prfx] = make([]string, 0) + } + tpr.revDests[prfx] = append(tpr.revDests[prfx], tpDst.Tag) + } } return } @@ -1573,6 +1583,12 @@ func (tpr *TpReader) LoadAliases() error { av.Pairs[v.Target] = make(map[string]string) } av.Pairs[v.Target][v.Original] = v.Alias + // Report reverse aliases keys which we need to reload late + rvAlsKey := v.Alias + v.Target + tal.Context + if _, hasIt := tpr.revAliases[rvAlsKey]; !hasIt { + tpr.revAliases[rvAlsKey] = make([]string, 0) + } + tpr.revAliases[rvAlsKey] = append(tpr.revAliases[rvAlsKey], utils.ConcatenatedKey(al.GetId(), v.DestinationId)) } } return err @@ -1685,6 +1701,12 @@ func (tpr *TpReader) WriteToDatabase(flush, verbose, disable_reverse bool) (err log.Print("\t", d.Id, " : ", d.Prefixes) } } + if verbose { + log.Print("ReverseDestinations:") + for id, vals := range tpr.revDests { + log.Printf("\t %s : %+v", id, vals) + } + } if !disable_reverse && len(tpr.destinations) > 0 { if err = tpr.ratingStorage.RebuildReverseForPrefix(utils.REVERSE_DESTINATION_PREFIX); err != nil { return err @@ -1863,6 +1885,12 @@ func (tpr *TpReader) WriteToDatabase(flush, verbose, disable_reverse bool) (err log.Print("\t", al.GetId()) } } + if verbose { + log.Print("ReverseAliases:") + for id, vals := range tpr.revAliases { + log.Printf("\t %s : %+v", id, vals) + } + } if !disable_reverse && len(tpr.aliases) > 0 { if err = tpr.accountingStorage.RebuildReverseForPrefix(utils.REVERSE_ALIASES_PREFIX); err != nil { return err @@ -1958,6 +1986,14 @@ func (tpr *TpReader) GetLoadedIds(categ string) ([]string, error) { i++ } return keys, nil + case utils.REVERSE_DESTINATION_PREFIX: + keys := make([]string, len(tpr.revDests)) + i := 0 + for k := range tpr.revDests { + keys[i] = k + i++ + } + return keys, nil case utils.RATING_PLAN_PREFIX: keys := make([]string, len(tpr.ratingPlans)) i := 0 @@ -2030,6 +2066,14 @@ func (tpr *TpReader) GetLoadedIds(categ string) ([]string, error) { i++ } return keys, nil + case utils.REVERSE_ALIASES_PREFIX: + keys := make([]string, len(tpr.revAliases)) + i := 0 + for k := range tpr.revAliases { + keys[i] = k + i++ + } + return keys, nil case utils.ResourceLimitsPrefix: keys := make([]string, len(tpr.resLimits)) i := 0