From c53a3903deb2f27c48996f79497dd2564462dd25 Mon Sep 17 00:00:00 2001 From: TeoV Date: Mon, 2 Mar 2020 14:53:43 +0200 Subject: [PATCH] Migrator discover tenant from key instead of taking it from config fixes #2006 --- migrator/attributes.go | 12 ++++---- migrator/attributes_it_test.go | 55 +++++++++++++++++++++++++++++----- migrator/chargers.go | 13 ++++---- migrator/chargers_it_test.go | 37 ++++++++++++++++++----- migrator/dispatchers.go | 25 +++++++++------- migrator/filters.go | 10 ++++--- migrator/resource.go | 11 +++---- migrator/stats.go | 36 +++++++++++++++------- migrator/suppliers.go | 11 +++---- migrator/thresholds.go | 21 +++++++++---- packages/debian/changelog | 1 + 11 files changed, 165 insertions(+), 67 deletions(-) diff --git a/migrator/attributes.go b/migrator/attributes.go index 1b0170f19..7a7bc84cd 100644 --- a/migrator/attributes.go +++ b/migrator/attributes.go @@ -46,14 +46,16 @@ type v1AttributeProfile struct { func (m *Migrator) migrateCurrentAttributeProfile() (err error) { var ids []string - tenant := config.CgrConfig().GeneralCfg().DefaultTenant ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.AttributeProfilePrefix) if err != nil { return err } for _, id := range ids { - idg := strings.TrimPrefix(id, utils.AttributeProfilePrefix+tenant+":") - attrPrf, err := m.dmIN.DataManager().GetAttributeProfile(tenant, idg, false, false, utils.NonTransactional) + tntID := strings.SplitN(strings.TrimPrefix(id, utils.AttributeProfilePrefix), utils.InInFieldSep, 2) + if len(tntID) < 2 { + return fmt.Errorf("Invalid key <%s> when migrating attributes", id) + } + attrPrf, err := m.dmIN.DataManager().GetAttributeProfile(tntID[0], tntID[1], false, false, utils.NonTransactional) if err != nil { return err } @@ -63,8 +65,8 @@ func (m *Migrator) migrateCurrentAttributeProfile() (err error) { if err := m.dmOut.DataManager().SetAttributeProfile(attrPrf, true); err != nil { return err } - if err := m.dmIN.DataManager().RemoveAttributeProfile(tenant, - idg, utils.NonTransactional, false); err != nil { + if err := m.dmIN.DataManager().RemoveAttributeProfile(tntID[0], + tntID[1], utils.NonTransactional, false); err != nil { return err } m.stats[utils.Attributes]++ diff --git a/migrator/attributes_it_test.go b/migrator/attributes_it_test.go index bd0c160b0..270663ade 100755 --- a/migrator/attributes_it_test.go +++ b/migrator/attributes_it_test.go @@ -301,6 +301,25 @@ func testAttrITMigrateAndMove(t *testing.T) { }, Weight: 20, } + attrPrf2 := &engine.AttributeProfile{ + Tenant: "cgrates.com", + ID: "ATTR_1", + Contexts: []string{utils.MetaSessionS}, + FilterIDs: []string{"*string:Accont:1001"}, + ActivationInterval: &utils.ActivationInterval{ + ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + ExpiryTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + }, + Attributes: []*engine.Attribute{ + { + FilterIDs: []string{"*string:FL1:In1"}, + Path: utils.MetaReq + utils.NestingSep + "FL1", + Type: utils.MetaVariable, + Value: config.NewRSRParsersMustCompile("Al1", true, utils.INFIELD_SEP), + }, + }, + Weight: 20, + } switch attrAction { case utils.Migrate: err := attrMigrator.dmIN.setV1AttributeProfile(v1Attribute) @@ -343,22 +362,29 @@ func testAttrITMigrateAndMove(t *testing.T) { if err := attrMigrator.dmIN.DataManager().SetAttributeProfile(attrPrf, false); err != nil { t.Error(err) } + if err := attrMigrator.dmIN.DataManager().SetAttributeProfile(attrPrf2, false); err != nil { + t.Error(err) + } currentVersion := engine.CurrentDataDBVersions() err := attrMigrator.dmOut.DataManager().DataDB().SetVersions(currentVersion, false) if err != nil { t.Error("Error when setting version for Attributes ", err.Error()) } - - _, err = attrMigrator.dmOut.DataManager().GetAttributeProfile("cgrates.org", - "ATTR_1", false, false, utils.NonTransactional) - if err != utils.ErrNotFound { + // make sure we don't have attributes in dmOut + if _, err = attrMigrator.dmOut.DataManager().GetAttributeProfile("cgrates.org", + "ATTR_1", false, false, utils.NonTransactional); err == nil || err != utils.ErrNotFound { t.Error(err) } - + if _, err = attrMigrator.dmOut.DataManager().GetAttributeProfile("cgrates.com", + "ATTR_1", false, false, utils.NonTransactional); err == nil || err != utils.ErrNotFound { + t.Error(err) + } + // move err, _ = attrMigrator.Migrate([]string{utils.MetaAttributes}) if err != nil { t.Error("Error when migrating Attributes ", err.Error()) } + // verify ATTR_1 with tenant cgrates.org result, err := attrMigrator.dmOut.DataManager().GetAttributeProfile("cgrates.org", "ATTR_1", false, false, utils.NonTransactional) if err != nil { @@ -369,9 +395,24 @@ func testAttrITMigrateAndMove(t *testing.T) { if !reflect.DeepEqual(result, attrPrf) { t.Errorf("Expecting: %+v, received: %+v", attrPrf, result) } - result, err = attrMigrator.dmIN.DataManager().GetAttributeProfile("cgrates.org", + // verify ATTR_1 with tenant cgrates.com + result, err = attrMigrator.dmOut.DataManager().GetAttributeProfile("cgrates.com", "ATTR_1", false, false, utils.NonTransactional) - if err != utils.ErrNotFound { + if err != nil { + t.Fatal(err) + } + result.Compile() + attrPrf2.Compile() + if !reflect.DeepEqual(result, attrPrf2) { + t.Errorf("Expecting: %+v, received: %+v", attrPrf2, result) + } + // make sure we don't have attributes in dmIn + if _, err = attrMigrator.dmIN.DataManager().GetAttributeProfile("cgrates.org", + "ATTR_1", false, false, utils.NonTransactional); err == nil || err != utils.ErrNotFound { + t.Error(err) + } + if _, err = attrMigrator.dmIN.DataManager().GetAttributeProfile("cgrates.com", + "ATTR_1", false, false, utils.NonTransactional); err == nil || err != utils.ErrNotFound { t.Error(err) } } diff --git a/migrator/chargers.go b/migrator/chargers.go index 9d352cbeb..450d3b7d4 100755 --- a/migrator/chargers.go +++ b/migrator/chargers.go @@ -22,21 +22,22 @@ import ( "fmt" "strings" - "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/utils" ) func (m *Migrator) migrateCurrentCharger() (err error) { var ids []string - tenant := config.CgrConfig().GeneralCfg().DefaultTenant ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ChargerProfilePrefix) if err != nil { return err } for _, id := range ids { - idg := strings.TrimPrefix(id, utils.ChargerProfilePrefix+tenant+":") - cpp, err := m.dmIN.DataManager().GetChargerProfile(tenant, idg, false, false, utils.NonTransactional) + tntID := strings.SplitN(strings.TrimPrefix(id, utils.ChargerProfilePrefix), utils.InInFieldSep, 2) + if len(tntID) < 2 { + return fmt.Errorf("Invalid key <%s> when migrating chargers", id) + } + cpp, err := m.dmIN.DataManager().GetChargerProfile(tntID[0], tntID[1], false, false, utils.NonTransactional) if err != nil { return err } @@ -46,8 +47,8 @@ func (m *Migrator) migrateCurrentCharger() (err error) { if err := m.dmOut.DataManager().SetChargerProfile(cpp, true); err != nil { return err } - if err := m.dmIN.DataManager().RemoveChargerProfile(tenant, - idg, utils.NonTransactional, false); err != nil { + if err := m.dmIN.DataManager().RemoveChargerProfile(tntID[0], + tntID[1], utils.NonTransactional, false); err != nil { return err } m.stats[utils.Chargers] += 1 diff --git a/migrator/chargers_it_test.go b/migrator/chargers_it_test.go index 4f8bbfbe6..63a20e083 100755 --- a/migrator/chargers_it_test.go +++ b/migrator/chargers_it_test.go @@ -185,12 +185,26 @@ func testChrgITMigrateAndMove(t *testing.T) { AttributeIDs: []string{"ATTR_1"}, Weight: 20, } + chrgPrf2 := &engine.ChargerProfile{ + Tenant: "cgrates.com", + ID: "CHRG_1", + FilterIDs: []string{"*string:Accont:1001"}, + ActivationInterval: &utils.ActivationInterval{ + ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + ExpiryTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + }, + AttributeIDs: []string{"ATTR_1"}, + Weight: 20, + } switch chrgAction { case utils.Migrate: // for the momment only one version of chargers exists case utils.Move: if err := chrgMigrator.dmIN.DataManager().SetChargerProfile(chrgPrf, false); err != nil { t.Error(err) } + if err := chrgMigrator.dmIN.DataManager().SetChargerProfile(chrgPrf2, false); err != nil { + t.Error(err) + } currentVersion := engine.CurrentDataDBVersions() err := chrgMigrator.dmOut.DataManager().DataDB().SetVersions(currentVersion, false) if err != nil { @@ -207,17 +221,24 @@ func testChrgITMigrateAndMove(t *testing.T) { if err != nil { t.Error("Error when migrating Chargers ", err.Error()) } - result, err := chrgMigrator.dmOut.DataManager().GetChargerProfile("cgrates.org", - "CHRG_1", false, false, utils.NonTransactional) - if err != nil { + if result, err := chrgMigrator.dmOut.DataManager().GetChargerProfile("cgrates.org", + "CHRG_1", false, false, utils.NonTransactional); err != nil { t.Fatal(err) - } - if !reflect.DeepEqual(result, chrgPrf) { + } else if !reflect.DeepEqual(result, chrgPrf) { t.Errorf("Expecting: %+v, received: %+v", chrgPrf, result) } - result, err = chrgMigrator.dmIN.DataManager().GetChargerProfile("cgrates.org", - "CHRG_1", false, false, utils.NonTransactional) - if err != utils.ErrNotFound { + if result, err := chrgMigrator.dmOut.DataManager().GetChargerProfile("cgrates.com", + "CHRG_1", false, false, utils.NonTransactional); err != nil { + t.Fatal(err) + } else if !reflect.DeepEqual(result, chrgPrf2) { + t.Errorf("Expecting: %+v, received: %+v", chrgPrf2, result) + } + if _, err = chrgMigrator.dmIN.DataManager().GetChargerProfile("cgrates.org", + "CHRG_1", false, false, utils.NonTransactional); err == nil || err != utils.ErrNotFound { + t.Error(err) + } + if _, err = chrgMigrator.dmIN.DataManager().GetChargerProfile("cgrates.com", + "CHRG_1", false, false, utils.NonTransactional); err == nil || err != utils.ErrNotFound { t.Error(err) } } diff --git a/migrator/dispatchers.go b/migrator/dispatchers.go index 74b6f6e82..f3bbcfd85 100644 --- a/migrator/dispatchers.go +++ b/migrator/dispatchers.go @@ -22,21 +22,22 @@ import ( "fmt" "strings" - "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/utils" ) func (m *Migrator) migrateCurrentDispatcher() (err error) { var ids []string - tenant := config.CgrConfig().GeneralCfg().DefaultTenant ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.DispatcherProfilePrefix) if err != nil { return err } for _, id := range ids { - idg := strings.TrimPrefix(id, utils.DispatcherProfilePrefix+tenant+":") - dpp, err := m.dmIN.DataManager().GetDispatcherProfile(tenant, idg, false, false, utils.NonTransactional) + tntID := strings.SplitN(strings.TrimPrefix(id, utils.DispatcherProfilePrefix), utils.InInFieldSep, 2) + if len(tntID) < 2 { + return fmt.Errorf("Invalid key <%s> when migrating dispatcher profiles", id) + } + dpp, err := m.dmIN.DataManager().GetDispatcherProfile(tntID[0], tntID[1], false, false, utils.NonTransactional) if err != nil { return err } @@ -46,8 +47,8 @@ func (m *Migrator) migrateCurrentDispatcher() (err error) { if err := m.dmOut.DataManager().SetDispatcherProfile(dpp, true); err != nil { return err } - if err := m.dmIN.DataManager().RemoveDispatcherProfile(tenant, - idg, utils.NonTransactional, false); err != nil { + if err := m.dmIN.DataManager().RemoveDispatcherProfile(tntID[0], + tntID[1], utils.NonTransactional, false); err != nil { return err } m.stats[utils.Dispatchers] += 1 @@ -57,14 +58,16 @@ func (m *Migrator) migrateCurrentDispatcher() (err error) { func (m *Migrator) migrateCurrentDispatcherHost() (err error) { var ids []string - tenant := config.CgrConfig().GeneralCfg().DefaultTenant ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.DispatcherHostPrefix) if err != nil { return err } for _, id := range ids { - idg := strings.TrimPrefix(id, utils.DispatcherHostPrefix+tenant+":") - dpp, err := m.dmIN.DataManager().GetDispatcherHost(tenant, idg, false, false, utils.NonTransactional) + tntID := strings.SplitN(strings.TrimPrefix(id, utils.DispatcherHostPrefix), utils.InInFieldSep, 2) + if len(tntID) < 2 { + return fmt.Errorf("Invalid key <%s> when migrating dispatcher hosts", id) + } + dpp, err := m.dmIN.DataManager().GetDispatcherHost(tntID[0], tntID[1], false, false, utils.NonTransactional) if err != nil { return err } @@ -74,8 +77,8 @@ func (m *Migrator) migrateCurrentDispatcherHost() (err error) { if err := m.dmOut.DataManager().SetDispatcherHost(dpp); err != nil { return err } - if err := m.dmIN.DataManager().RemoveDispatcherHost(tenant, - idg, utils.NonTransactional); err != nil { + if err := m.dmIN.DataManager().RemoveDispatcherHost(tntID[0], + tntID[1], utils.NonTransactional); err != nil { return err } } diff --git a/migrator/filters.go b/migrator/filters.go index 816db9381..d2033fe1d 100644 --- a/migrator/filters.go +++ b/migrator/filters.go @@ -29,21 +29,23 @@ import ( func (m *Migrator) migrateCurrentRequestFilter() (err error) { var ids []string - tenant := config.CgrConfig().GeneralCfg().DefaultTenant ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.FilterPrefix) if err != nil { return err } for _, id := range ids { - idg := strings.TrimPrefix(id, utils.FilterPrefix+tenant+":") - fl, err := engine.GetFilter(m.dmIN.DataManager(), tenant, idg, false, false, utils.NonTransactional) + tntID := strings.SplitN(strings.TrimPrefix(id, utils.FilterPrefix), utils.InInFieldSep, 2) + if len(tntID) < 2 { + return fmt.Errorf("Invalid key <%s> when migrating filters", id) + } + fl, err := engine.GetFilter(m.dmIN.DataManager(), tntID[0], tntID[1], false, false, utils.NonTransactional) if err != nil { return err } if m.dryRun || fl == nil { continue } - if err := m.dmIN.DataManager().RemoveFilter(tenant, idg, utils.NonTransactional); err != nil { + if err := m.dmIN.DataManager().RemoveFilter(tntID[0], tntID[1], utils.NonTransactional); err != nil { return err } if err := m.dmOut.DataManager().SetFilter(fl); err != nil { diff --git a/migrator/resource.go b/migrator/resource.go index 6f46a1c95..8bdf99d55 100644 --- a/migrator/resource.go +++ b/migrator/resource.go @@ -22,21 +22,22 @@ import ( "fmt" "strings" - "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/utils" ) func (m *Migrator) migrateCurrentResource() (err error) { var ids []string - tenant := config.CgrConfig().GeneralCfg().DefaultTenant ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ResourceProfilesPrefix) if err != nil { return err } for _, id := range ids { - idg := strings.TrimPrefix(id, utils.ResourceProfilesPrefix+tenant+":") - res, err := m.dmIN.DataManager().GetResourceProfile(tenant, idg, false, false, utils.NonTransactional) + tntID := strings.SplitN(strings.TrimPrefix(id, utils.ResourceProfilesPrefix), utils.InInFieldSep, 2) + if len(tntID) < 2 { + return fmt.Errorf("Invalid key <%s> when migrating resource profiles", id) + } + res, err := m.dmIN.DataManager().GetResourceProfile(tntID[0], tntID[1], false, false, utils.NonTransactional) if err != nil { return err } @@ -46,7 +47,7 @@ func (m *Migrator) migrateCurrentResource() (err error) { if err := m.dmOut.DataManager().SetResourceProfile(res, true); err != nil { return err } - if err := m.dmIN.DataManager().RemoveResourceProfile(tenant, idg, utils.NonTransactional, false); err != nil { + if err := m.dmIN.DataManager().RemoveResourceProfile(tntID[0], tntID[1], utils.NonTransactional, false); err != nil { return err } m.stats[utils.Resource] += 1 diff --git a/migrator/stats.go b/migrator/stats.go index b1409b96e..4aee9feb2 100644 --- a/migrator/stats.go +++ b/migrator/stats.go @@ -61,21 +61,26 @@ type v1Stats []*v1Stat func (m *Migrator) moveStatQueueProfile() (err error) { //StatQueueProfile - tenant := config.CgrConfig().GeneralCfg().DefaultTenant var ids []string if ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.StatQueueProfilePrefix); err != nil { return err } for _, id := range ids { - idg := strings.TrimPrefix(id, utils.StatQueueProfilePrefix+tenant+":") - sgs, err := m.dmIN.DataManager().GetStatQueueProfile(tenant, idg, false, false, utils.NonTransactional) + tntID := strings.SplitN(strings.TrimPrefix(id, utils.StatQueueProfilePrefix), utils.InInFieldSep, 2) + if len(tntID) < 2 { + return fmt.Errorf("Invalid key <%s> when migrating stat queue profiles", id) + } + sgs, err := m.dmIN.DataManager().GetStatQueueProfile(tntID[0], tntID[1], false, false, utils.NonTransactional) if err != nil { return err } if sgs == nil || m.dryRun { continue } - if err = m.dmOut.DataManager().SetStatQueueProfile(sgs, true); err != nil { + if err := m.dmOut.DataManager().SetStatQueueProfile(sgs, true); err != nil { + return err + } + if err := m.dmIN.DataManager().RemoveStatQueueProfile(tntID[0], tntID[1], utils.NonTransactional, false); err != nil { return err } } @@ -84,14 +89,16 @@ func (m *Migrator) moveStatQueueProfile() (err error) { func (m *Migrator) migrateCurrentStats() (err error) { var ids []string - tenant := config.CgrConfig().GeneralCfg().DefaultTenant //StatQueue if ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.StatQueuePrefix); err != nil { return err } for _, id := range ids { - idg := strings.TrimPrefix(id, utils.StatQueuePrefix+tenant+":") - sgs, err := m.dmIN.DataManager().GetStatQueue(tenant, idg, false, false, utils.NonTransactional) + tntID := strings.SplitN(strings.TrimPrefix(id, utils.StatQueuePrefix), utils.InInFieldSep, 2) + if len(tntID) < 2 { + return fmt.Errorf("Invalid key <%s> when migrating stat queues", id) + } + sgs, err := m.dmIN.DataManager().GetStatQueue(tntID[0], tntID[1], false, false, utils.NonTransactional) if err != nil { return err @@ -102,6 +109,9 @@ func (m *Migrator) migrateCurrentStats() (err error) { if err := m.dmOut.DataManager().SetStatQueue(sgs); err != nil { return err } + if err := m.dmIN.DataManager().RemoveStatQueue(tntID[0], tntID[1], utils.NonTransactional); err != nil { + return err + } m.stats[utils.StatS] += 1 } @@ -177,16 +187,17 @@ func remakeQueue(sq *engine.StatQueue) (out *engine.StatQueue) { func (m *Migrator) migrateV2Stats() (err error) { var ids []string - tenant := config.CgrConfig().GeneralCfg().DefaultTenant //StatQueue if ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.StatQueuePrefix); err != nil { return err } for _, id := range ids { - idg := strings.TrimPrefix(id, utils.StatQueuePrefix+tenant+":") - sgs, err := m.dmIN.DataManager().GetStatQueue(tenant, idg, false, false, utils.NonTransactional) + tntID := strings.SplitN(strings.TrimPrefix(id, utils.StatQueuePrefix), utils.InInFieldSep, 2) + if len(tntID) < 2 { + return fmt.Errorf("Invalid key <%s> when migrating stat queues", id) + } + sgs, err := m.dmIN.DataManager().GetStatQueue(tntID[0], tntID[1], false, false, utils.NonTransactional) if err != nil { - return err } if sgs == nil || m.dryRun { @@ -195,6 +206,9 @@ func (m *Migrator) migrateV2Stats() (err error) { if err = m.dmOut.DataManager().SetStatQueue(remakeQueue(sgs)); err != nil { return err } + if err = m.dmIN.DataManager().RemoveStatQueue(tntID[0], tntID[1], utils.NonTransactional); err != nil { + return err + } m.stats[utils.StatS] += 1 } diff --git a/migrator/suppliers.go b/migrator/suppliers.go index d2e422fde..b1cb3004f 100644 --- a/migrator/suppliers.go +++ b/migrator/suppliers.go @@ -22,21 +22,22 @@ import ( "fmt" "strings" - "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/utils" ) func (m *Migrator) migrateCurrentSupplierProfile() (err error) { var ids []string - tenant := config.CgrConfig().GeneralCfg().DefaultTenant ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.SupplierProfilePrefix) if err != nil { return err } for _, id := range ids { - idg := strings.TrimPrefix(id, utils.SupplierProfilePrefix+tenant+":") - splp, err := m.dmIN.DataManager().GetSupplierProfile(tenant, idg, false, false, utils.NonTransactional) + tntID := strings.SplitN(strings.TrimPrefix(id, utils.SupplierProfilePrefix), utils.InInFieldSep, 2) + if len(tntID) < 2 { + return fmt.Errorf("Invalid key <%s> when migrating supplier profiles", id) + } + splp, err := m.dmIN.DataManager().GetSupplierProfile(tntID[0], tntID[1], false, false, utils.NonTransactional) if err != nil { return err } @@ -46,7 +47,7 @@ func (m *Migrator) migrateCurrentSupplierProfile() (err error) { if err := m.dmOut.DataManager().SetSupplierProfile(splp, true); err != nil { return err } - if err := m.dmIN.DataManager().RemoveSupplierProfile(tenant, idg, utils.NonTransactional, true); err != nil { + if err := m.dmIN.DataManager().RemoveSupplierProfile(tntID[0], tntID[1], utils.NonTransactional, true); err != nil { return err } m.stats[utils.Suppliers] += 1 diff --git a/migrator/thresholds.go b/migrator/thresholds.go index 216b7b805..870b6f2cc 100644 --- a/migrator/thresholds.go +++ b/migrator/thresholds.go @@ -49,15 +49,17 @@ type v2ActionTriggers []*v2ActionTrigger func (m *Migrator) migrateCurrentThresholds() (err error) { var ids []string - tenant := config.CgrConfig().GeneralCfg().DefaultTenant //Thresholds ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ThresholdPrefix) if err != nil { return err } for _, id := range ids { - idg := strings.TrimPrefix(id, utils.ThresholdPrefix+tenant+":") - ths, err := m.dmIN.DataManager().GetThreshold(tenant, idg, false, false, utils.NonTransactional) + tntID := strings.SplitN(strings.TrimPrefix(id, utils.ThresholdPrefix), utils.InInFieldSep, 2) + if len(tntID) < 2 { + return fmt.Errorf("Invalid key <%s> when migrating thresholds", id) + } + ths, err := m.dmIN.DataManager().GetThreshold(tntID[0], tntID[1], false, false, utils.NonTransactional) if err != nil { return err } @@ -67,6 +69,9 @@ func (m *Migrator) migrateCurrentThresholds() (err error) { if err := m.dmOut.DataManager().SetThreshold(ths); err != nil { return err } + if err := m.dmIN.DataManager().RemoveThreshold(tntID[0], tntID[1], utils.NonTransactional); err != nil { + return err + } m.stats[utils.Thresholds] += 1 } //ThresholdProfiles @@ -75,8 +80,11 @@ func (m *Migrator) migrateCurrentThresholds() (err error) { return err } for _, id := range ids { - idg := strings.TrimPrefix(id, utils.ThresholdProfilePrefix+tenant+":") - ths, err := m.dmIN.DataManager().GetThresholdProfile(tenant, idg, false, false, utils.NonTransactional) + tntID := strings.SplitN(strings.TrimPrefix(id, utils.ThresholdProfilePrefix), utils.InInFieldSep, 2) + if len(tntID) < 2 { + return fmt.Errorf("Invalid key <%s> when migrating threshold profiles", id) + } + ths, err := m.dmIN.DataManager().GetThresholdProfile(tntID[0], tntID[1], false, false, utils.NonTransactional) if err != nil { return err } @@ -86,6 +94,9 @@ func (m *Migrator) migrateCurrentThresholds() (err error) { if err := m.dmOut.DataManager().SetThresholdProfile(ths, true); err != nil { return err } + if err := m.dmIN.DataManager().RemoveThresholdProfile(tntID[0], tntID[1], utils.NonTransactional, false); err != nil { + return err + } } return } diff --git a/packages/debian/changelog b/packages/debian/changelog index e38af72f6..60ce6ca33 100644 --- a/packages/debian/changelog +++ b/packages/debian/changelog @@ -31,6 +31,7 @@ cgrates (0.11.0~dev) UNRELEASED; urgency=medium it *internal * [Replicator] Add Limit and StaticTTL otions for Items from DataDB/StorDB + * Migrator discover tenant from key instead of taking it from config -- Alexandru Tripon Wed, 19 Feb 2020 13:25:52 +0200