Merge pull request #9808 from tb365/bugfix/tb-bugfix-010821

fix(region): aws elb backendgroup sync bugfix
This commit is contained in:
yunion-ci-robot
2021-01-09 16:40:13 +08:00
committed by GitHub
2 changed files with 18 additions and 16 deletions
@@ -184,9 +184,9 @@ func (man *SAwsCachedLbbgManager) GetCachedBackendGroups(backendGroupId string)
return ret, nil
}
func (man *SAwsCachedLbbgManager) getLoadbalancerBackendgroupsByRegion(regionId string) ([]SAwsCachedLbbg, error) {
func (man *SAwsCachedLbbgManager) getLoadbalancerBackendgroupsByRegion(managerId string, regionId string) ([]SAwsCachedLbbg, error) {
lbbgs := []SAwsCachedLbbg{}
q := man.Query().Equals("cloudregion_id", regionId).IsFalse("pending_deleted")
q := man.Query().Equals("cloudregion_id", regionId).Equals("manager_id", managerId).IsFalse("pending_deleted")
if err := db.FetchModelObjects(man, q, &lbbgs); err != nil {
log.Errorf("failed to get lbbgs for region: %s error: %v", regionId, err)
return nil, err
@@ -204,7 +204,7 @@ func (man *SAwsCachedLbbgManager) SyncLoadbalancerBackendgroups(ctx context.Cont
remoteLbbgs := []cloudprovider.ICloudLoadbalancerBackendGroup{}
syncResult := compare.SyncResult{}
dbLbbgs, err := man.getLoadbalancerBackendgroupsByRegion(region.GetId())
dbLbbgs, err := man.getLoadbalancerBackendgroupsByRegion(provider.GetId(), region.GetId())
if err != nil {
syncResult.Error(err)
return nil, nil, syncResult
+15 -13
View File
@@ -790,11 +790,9 @@ func (lb *SLoadbalancer) Delete(ctx context.Context, userCred mcclient.TokenCred
func (man *SLoadbalancerManager) getLoadbalancersByRegion(region *SCloudregion, provider *SCloudprovider) ([]SLoadbalancer, error) {
lbs := []SLoadbalancer{}
vpcs := VpcManager.Query().SubQuery()
q := man.Query()
q = q.Join(vpcs, sqlchemy.Equals(q.Field("vpc_id"), vpcs.Field("id")))
q = q.Filter(sqlchemy.Equals(vpcs.Field("cloudregion_id"), region.Id))
q = q.Filter(sqlchemy.Equals(vpcs.Field("manager_id"), provider.Id))
q = q.Equals("manager_id", provider.Id)
q = q.Equals("cloudregion_id", region.Id)
q = q.IsFalse("pending_deleted")
if err := db.FetchModelObjects(man, q, &lbs); err != nil {
log.Errorf("failed to get lbs for region: %v provider: %v error: %v", region, provider, err)
@@ -816,6 +814,12 @@ func (man *SLoadbalancerManager) getLoadbalancersByExternalIds(externalIds []str
}
func (man *SLoadbalancerManager) getLocalLoadbalancers(ctx context.Context, userCred mcclient.TokenCredential, provider *SCloudprovider, region *SCloudregion, lbs []cloudprovider.ICloudLoadbalancer) ([]SLoadbalancer, error) {
// current external ID
extIds := []string{}
for i := range lbs {
extIds = append(extIds, lbs[i].GetGlobalId())
}
part1, err := man.getLoadbalancersByRegion(region, provider)
if err != nil {
return nil, err
@@ -824,15 +828,13 @@ func (man *SLoadbalancerManager) getLocalLoadbalancers(ctx context.Context, user
localLbs := map[string]SLoadbalancer{}
for i := range part1 {
localLbs[part1[i].Id] = part1[i]
if len(part1[i].GetExternalId()) > 0 {
extIds = append(extIds, part1[i].GetExternalId())
}
}
externalIds := []string{}
for i := range lbs {
externalIds = append(externalIds, lbs[i].GetGlobalId())
}
if len(externalIds) > 0 {
part2, err := man.getLoadbalancersByExternalIds(externalIds)
if len(extIds) > 0 {
part2, err := man.getLoadbalancersByExternalIds(extIds)
if err != nil {
return nil, err
}
@@ -842,7 +844,7 @@ func (man *SLoadbalancerManager) getLocalLoadbalancers(ctx context.Context, user
}
}
ret := []SLoadbalancer{}
ret := make([]SLoadbalancer, 0)
for id, _ := range localLbs {
ret = append(ret, localLbs[id])
}
@@ -860,7 +862,7 @@ func (man *SLoadbalancerManager) SyncLoadbalancers(ctx context.Context, userCred
remoteLbs := []cloudprovider.ICloudLoadbalancer{}
syncResult := compare.SyncResult{}
dbLbs, err := man.getLocalLoadbalancers(ctx, userCred, provider, region, remoteLbs)
dbLbs, err := man.getLocalLoadbalancers(ctx, userCred, provider, region, lbs)
if err != nil {
syncResult.Error(err)
return nil, nil, syncResult