From 3e004016c5ec5050e608869615cb0a74ce17c62f Mon Sep 17 00:00:00 2001 From: adragusin Date: Wed, 24 Jun 2020 18:00:21 +0300 Subject: [PATCH] Updated filters migration --- migrator/filters.go | 210 ++++++++++++++++++++++++++------------------ 1 file changed, 123 insertions(+), 87 deletions(-) diff --git a/migrator/filters.go b/migrator/filters.go index 074096d99..abcda5d73 100644 --- a/migrator/filters.go +++ b/migrator/filters.go @@ -191,23 +191,7 @@ func migrateInlineFilterV2(fl string) string { return fmt.Sprintf("%s::~%s", ruleSplt[0], utils.MetaReq+utils.NestingSep+strings.Join(ruleSplt[2:], utils.InInFieldSep)) } -func (m *Migrator) migrateRequestFilterV1() (err error) { - for { - fl, err := m.dmIN.getV1Filter() - if err != nil && err != utils.ErrNoMoreData { - return err - } - if err == utils.ErrNoMoreData { - break - } - if m.dryRun || fl == nil { - continue - } - if err := m.dmOut.DataManager().SetFilter(migrateFilterV1(fl), true); err != nil { - return err - } - m.stats[utils.RQF]++ - } +func (m *Migrator) migrateOthersv1() (err error) { if err = m.migrateResourceProfileFiltersV1(); err != nil { return err } @@ -229,34 +213,26 @@ func (m *Migrator) migrateRequestFilterV1() (err error) { if err = m.migrateDispatcherProfileFiltersV1(); err != nil { return err } - vrs := engine.Versions{utils.RQF: engine.CurrentDataDBVersions()[utils.RQF]} - if err = m.dmOut.DataManager().DataDB().SetVersions(vrs, false); err != nil { - return utils.NewCGRError(utils.Migrator, - utils.ServerErrorCaps, - err.Error(), - fmt.Sprintf("error: <%s> when updating Filters version into dataDB", err.Error())) - } return } -func (m *Migrator) migrateRequestFilterV2() (err error) { - for { - fl, err := m.dmIN.getV1Filter() - if err != nil && err != utils.ErrNoMoreData { - return err - } - if err == utils.ErrNoMoreData { - break - } - if m.dryRun || fl == nil { - continue - } - if err := m.dmOut.DataManager().SetFilter(migrateFilterV2(fl), true); err != nil { - return fmt.Errorf("Error: <%s> when setting filter with tenant: <%s> and id: <%s> after migration", - err.Error(), fl.Tenant, fl.ID) - } - m.stats[utils.RQF]++ +func (m *Migrator) migrateRequestFilterV1() (fltr *engine.Filter, err error) { + // var v1Fltr *v1Filter + v1Fltr, err := m.dmIN.getV1Filter() + fmt.Println("inside migrateRequestFilterV1 ================ err: ", err) + fmt.Println("inside migrateRequestFilterV1 ================ fltr: ", utils.ToJSON(v1Fltr)) + if err != nil { + fmt.Println("err!=nil: ", err) + return } + if v1Fltr == nil { + return nil, utils.ErrNoMoreData + } + fltr = migrateFilterV1(v1Fltr) + return +} + +func (m *Migrator) migrateOthersV2() (err error) { if err = m.migrateResourceProfileFiltersV2(); err != nil { return fmt.Errorf("Error: <%s> when trying to migrate filter for ResourceProfiles", err.Error()) @@ -285,41 +261,30 @@ func (m *Migrator) migrateRequestFilterV2() (err error) { return fmt.Errorf("Error: <%s> when trying to migrate filter for DispatcherProfiles", err.Error()) } - vrs := engine.Versions{utils.RQF: engine.CurrentDataDBVersions()[utils.RQF]} - if err = m.dmOut.DataManager().DataDB().SetVersions(vrs, false); err != nil { - return utils.NewCGRError(utils.Migrator, - utils.ServerErrorCaps, - err.Error(), - fmt.Sprintf("error: <%s> when updating Filters version into dataDB", err.Error())) - } return } -func (m *Migrator) migrateRequestFilterV3() (err error) { - for { - fl, err := m.dmIN.getV1Filter() - if err != nil && err != utils.ErrNoMoreData { - return err - } - if err == utils.ErrNoMoreData { - break - } - if m.dryRun || fl == nil { - continue - } - if err := m.dmOut.DataManager().SetFilter(migrateFilterV3(fl), true); err != nil { - return fmt.Errorf("Error: <%s> when setting filter with tenant: <%s> and id: <%s> after migration", - err.Error(), fl.Tenant, fl.ID) - } - m.stats[utils.RQF]++ +func (m *Migrator) migrateRequestFilterV2() (fltr *engine.Filter, err error) { + var v1Fltr *v1Filter + if v1Fltr, err = m.dmIN.getV1Filter(); err != nil { + return nil, err } - vrs := engine.Versions{utils.RQF: engine.CurrentDataDBVersions()[utils.RQF]} - if err = m.dmOut.DataManager().DataDB().SetVersions(vrs, false); err != nil { - return utils.NewCGRError(utils.Migrator, - utils.ServerErrorCaps, - err.Error(), - fmt.Sprintf("error: <%s> when updating Filters version into dataDB", err.Error())) + if err == utils.ErrNoMoreData { + return nil, nil } + fltr = migrateFilterV2(v1Fltr) + return +} + +func (m *Migrator) migrateRequestFilterV3() (fltr *engine.Filter, err error) { + var v1Fltr *v1Filter + if v1Fltr, err = m.dmIN.getV1Filter(); err != nil { + return nil, err + } + if v1Fltr == nil { + return + } + fltr = migrateFilterV3(v1Fltr) return } @@ -338,26 +303,97 @@ func (m *Migrator) migrateFilters() (err error) { utils.UndefinedVersion, "version number is not defined for ActionTriggers model") } - switch vrs[utils.RQF] { - case 3: - if err = m.migrateRequestFilterV3(); err != nil { - return err + migrated := true + migratedFrom := 0 + var fltr *engine.Filter + for { + fmt.Println("first_for") + version := vrs[utils.RQF] + for { + fmt.Println("second_for\n\tversion = ", version) + switch version { + case current[utils.RQF]: + migrated = false + if m.sameDataDB { + break + } + if err = m.migrateCurrentRequestFilter(); err != nil { + return err + } + case 1: + fmt.Println("case 1 :AICI") + if fltr, err = m.migrateRequestFilterV1(); err != nil && err != utils.ErrNoMoreData { + return err + } + migratedFrom = 1 + version = 4 + case 2: + fmt.Println("case 2: AICI") + if fltr, err = m.migrateRequestFilterV2(); err != nil && err != utils.ErrNoMoreData { + return err + } + migratedFrom = 2 + version = 4 + case 3: + fmt.Println("case 3: AICI") + if fltr, err = m.migrateRequestFilterV3(); err != nil && err != utils.ErrNoMoreData { + return err + } + migratedFrom = 3 + version = 4 + } + fmt.Println("end_switch_statement\n\tversion = ", version) + fmt.Println("current[utils.RQF]: ", current[utils.RQF]) + if version == current[utils.RQF] || err == utils.ErrNoMoreData { + break + } } - case 2: - if err = m.migrateRequestFilterV2(); err != nil { - return err - } - case 1: - if err = m.migrateRequestFilterV1(); err != nil { - return err - } - case current[utils.RQF]: - if m.sameDataDB { + fmt.Println("err: ", err) + fmt.Println("!migrated: ", !migrated) + if err == utils.ErrNoMoreData || !migrated { break } - if err = m.migrateCurrentRequestFilter(); err != nil { - return err + fmt.Println("before this check !m.dryRun && migrated") + if !m.dryRun && migrated { + //set filters + switch migratedFrom { + case 1: + fmt.Println("SET___case 1 :AICI") + if err := m.migrateOthersv1(); err != nil { + return err + } + if err := m.dmOut.DataManager().SetFilter(fltr, true); err != nil { + return fmt.Errorf("Error: <%s> when setting filter with tenant: <%s> and id: <%s> after migration", + err.Error(), fltr.Tenant, fltr.ID) + } + case 2: + fmt.Println("SET___case 2: AICI") + if err := m.migrateOthersV2(); err != nil { + return err + } + if err := m.dmOut.DataManager().SetFilter(fltr, true); err != nil { + return fmt.Errorf("Error: <%s> when setting filter with tenant: <%s> and id: <%s> after migration", + err.Error(), fltr.Tenant, fltr.ID) + } + case 3: + fmt.Println("SET___case 3: AICI") + if err := m.dmOut.DataManager().SetFilter(fltr, true); err != nil { + return fmt.Errorf("Error: <%s> when setting filter with tenant: <%s> and id: <%s> after migration", + err.Error(), fltr.Tenant, fltr.ID) + } + } } + m.stats[utils.RQF]++ + } + if m.dryRun || !migrated { + return nil + } + vrs = engine.Versions{utils.RQF: engine.CurrentDataDBVersions()[utils.RQF]} + if err = m.dmOut.DataManager().DataDB().SetVersions(vrs, false); err != nil { + return utils.NewCGRError(utils.Migrator, + utils.ServerErrorCaps, + err.Error(), + fmt.Sprintf("error: <%s> when updating Filters version into dataDB", err.Error())) } return m.ensureIndexesDataDB(engine.ColFlt) }