From f71f197b5da5ff41e7857962906fb26a351e5609 Mon Sep 17 00:00:00 2001 From: TeoV Date: Wed, 29 Jul 2020 15:50:24 +0300 Subject: [PATCH] Add function in migrator for move RateProfiles --- migrator/rateprofiles.go | 76 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/migrator/rateprofiles.go b/migrator/rateprofiles.go index 52e99ee94..9e7eb8c3c 100644 --- a/migrator/rateprofiles.go +++ b/migrator/rateprofiles.go @@ -17,3 +17,79 @@ along with this program. If not, see */ package migrator + +import ( + "fmt" + "strings" + + "github.com/cgrates/cgrates/engine" + "github.com/cgrates/cgrates/utils" +) + +func (m *Migrator) migrateCurrentRateProfiles() (err error) { + var ids []string + ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.RateProfilePrefix) + if err != nil { + return err + } + for _, id := range ids { + tntID := strings.SplitN(strings.TrimPrefix(id, utils.RateProfilePrefix), utils.InInFieldSep, 2) + if len(tntID) < 2 { + return fmt.Errorf("Invalid key <%s> when migrating rate profiles", id) + } + rp, err := m.dmIN.DataManager().GetRateProfile(tntID[0], tntID[1], false, false, utils.NonTransactional) + if err != nil { + return err + } + if rp == nil || m.dryRun { + continue + } + if err := m.dmOut.DataManager().SetRateProfile(rp, true); err != nil { + return err + } + if err := m.dmIN.DataManager().RemoveRateProfile(tntID[0], tntID[1], utils.NonTransactional, false); err != nil { + return err + } + m.stats[utils.RateProfiles]++ + } + return +} + +func (m *Migrator) migrateRateProfiles() (err error) { + var vrs engine.Versions + current := engine.CurrentDataDBVersions() + if vrs, err = m.getVersions(utils.RateProfiles); err != nil { + return + } + + migrated := true + for { + version := vrs[utils.RateProfiles] + for { + switch version { + default: + return fmt.Errorf("Unsupported version %v", version) + case current[utils.RateProfiles]: + migrated = false + if m.sameDataDB { + break + } + if err = m.migrateCurrentRateProfiles(); err != nil { + return + } + } + if version == current[utils.RateProfiles] || err == utils.ErrNoMoreData { + break + } + } + if err == utils.ErrNoMoreData || !migrated { + break + } + m.stats[utils.RatingPlan]++ + } + // All done, update version wtih current one + if err = m.setVersions(utils.RateProfiles); err != nil { + return + } + return m.ensureIndexesDataDB(engine.ColRpp) +}