fix(region): lb listener rule associate backend group (#22735)

This commit is contained in:
屈轩
2025-06-18 14:15:05 +08:00
committed by GitHub
parent 1aa70f504a
commit e93e9a0a8a

View File

@@ -758,127 +758,21 @@ func (lbr *SLoadbalancerListenerRule) constructFieldsFromCloudListenerRule(userC
lbr.RedirectPath = extRule.GetRedirectPath()
}
/*
if groupId := extRule.GetBackendGroupId(); len(groupId) > 0 {
if utils.IsInStringArray(lbr.GetProviderName(), []string{api.CLOUD_PROVIDER_HUAWEI, api.CLOUD_PROVIDER_HCSO, api.CLOUD_PROVIDER_HCS}) {
group, err := db.FetchByExternalId(HuaweiCachedLbbgManager, groupId)
if err != nil {
if err == sql.ErrNoRows {
lbr.BackendGroupId = ""
}
log.Errorf("Fetch huawei loadbalancer backendgroup by external id %s failed: %s", groupId, err)
} else {
lbr.BackendGroupId = group.(*SHuaweiCachedLbbg).BackendGroupId
}
} else if lbr.GetProviderName() == api.CLOUD_PROVIDER_AWS {
if len(groupId) > 0 {
group, err := db.FetchByExternalId(AwsCachedLbbgManager, groupId)
if err != nil {
log.Errorf("Fetch aws loadbalancer backendgroup by external id %s failed: %s", groupId, err)
} else {
lbr.BackendGroupId = group.(*SAwsCachedLbbg).BackendGroupId
}
}
} else if lbr.GetProviderName() == api.CLOUD_PROVIDER_QCLOUD {
group, err := db.FetchByExternalId(QcloudCachedLbbgManager, groupId)
if err != nil {
if err == sql.ErrNoRows {
lbr.BackendGroupId = ""
}
log.Errorf("Fetch qcloud loadbalancer backendgroup by external id %s failed: %s", groupId, err)
} else {
lbr.BackendGroupId = group.(*SQcloudCachedLbbg).BackendGroupId
}
} else if backendgroup, err := db.FetchByExternalId(LoadbalancerBackendGroupManager, groupId); err == nil {
lbr.BackendGroupId = backendgroup.GetId()
}
}
*/
}
func (lbr *SLoadbalancerListenerRule) updateCachedLoadbalancerBackendGroupAssociate(ctx context.Context, extRule cloudprovider.ICloudLoadbalancerListenerRule) error {
exteralLbbgId := extRule.GetBackendGroupId()
if len(exteralLbbgId) == 0 {
return nil
lis, err := lbr.GetLoadbalancerListener()
if err != nil {
return
}
/*
switch lbr.GetProviderName() {
case api.CLOUD_PROVIDER_HUAWEI, api.CLOUD_PROVIDER_HCSO, api.CLOUD_PROVIDER_HCS:
_group, err := db.FetchByExternalId(HuaweiCachedLbbgManager, exteralLbbgId)
if err != nil {
if err == sql.ErrNoRows {
lbr.BackendGroupId = ""
}
return fmt.Errorf("Fetch huawei loadbalancer backendgroup by external id %s failed: %s", exteralLbbgId, err)
}
if _group != nil {
group := _group.(*SHuaweiCachedLbbg)
if group.AssociatedId != lbr.Id {
_, err := db.UpdateWithLock(ctx, group, func() error {
group.AssociatedId = lbr.Id
group.AssociatedType = api.LB_ASSOCIATE_TYPE_RULE
return nil
})
if err != nil {
return errors.Wrap(err, "LoadbalancerListener.updateCachedLoadbalancerBackendGroupAssociate.huawei")
}
}
}
case api.CLOUD_PROVIDER_QCLOUD:
_group, err := db.FetchByExternalId(QcloudCachedLbbgManager, exteralLbbgId)
if err != nil {
if err == sql.ErrNoRows {
lbr.BackendGroupId = ""
}
return fmt.Errorf("Fetch qcloud loadbalancer backendgroup by external id %s failed: %s", exteralLbbgId, err)
}
if _group != nil {
group := _group.(*SQcloudCachedLbbg)
if group.AssociatedId != lbr.Id {
_, err := db.UpdateWithLock(ctx, group, func() error {
group.AssociatedId = lbr.Id
group.AssociatedType = api.LB_ASSOCIATE_TYPE_RULE
return nil
})
if err != nil {
return errors.Wrap(err, "LoadbalancerListener.updateCachedLoadbalancerBackendGroupAssociate.qcloud")
}
}
}
case api.CLOUD_PROVIDER_OPENSTACK:
_group, err := db.FetchByExternalId(OpenstackCachedLbbgManager, exteralLbbgId)
if err != nil {
if err == sql.ErrNoRows {
lbr.BackendGroupId = ""
}
return fmt.Errorf("Fetch openstack loadbalancer backendgroup by external id %s failed: %s", exteralLbbgId, err)
}
if _group != nil {
group := _group.(*SOpenstackCachedLbbg)
if group.AssociatedId != lbr.Id {
_, err := db.UpdateWithLock(ctx, group, func() error {
group.AssociatedId = lbr.Id
group.AssociatedType = api.LB_ASSOCIATE_TYPE_RULE
return nil
})
if err != nil {
return errors.Wrap(err, "LoadbalancerListener.updateCachedLoadbalancerBackendGroupAssociate.openstack")
}
}
}
default:
return nil
if groupId := extRule.GetBackendGroupId(); len(groupId) > 0 {
group, err := db.FetchByExternalIdAndManagerId(LoadbalancerBackendGroupManager, groupId, func(q *sqlchemy.SQuery) *sqlchemy.SQuery {
return q.Equals("loadbalancer_id", lis.LoadbalancerId)
})
if err != nil {
log.Errorf("Fetch loadbalancer backendgroup by external id %s failed: %s", groupId, err)
} else {
lbr.BackendGroupId = group.GetId()
}
*/
return nil
}
}
func (man *SLoadbalancerListenerRuleManager) newFromCloudLoadbalancerListenerRule(
@@ -894,8 +788,6 @@ func (man *SLoadbalancerListenerRuleManager) newFromCloudLoadbalancerListenerRul
lbr.ExternalId = extRule.GetGlobalId()
lbr.ListenerId = listener.Id
//lbr.ManagerId = listener.ManagerId
//lbr.CloudregionId = listener.CloudregionId
lbr.constructFieldsFromCloudListenerRule(userCred, extRule)
var err = func() error {
@@ -914,11 +806,6 @@ func (man *SLoadbalancerListenerRuleManager) newFromCloudLoadbalancerListenerRul
return nil, errors.Wrapf(err, "Insert")
}
err = lbr.updateCachedLoadbalancerBackendGroupAssociate(ctx, extRule)
if err != nil {
return nil, errors.Wrap(err, "LoadbalancerListenerRuleManager.newFromCloudLoadbalancerListenerRule")
}
db.OpsLog.LogEvent(lbr, db.ACT_CREATE, lbr.GetShortDesc(ctx), userCred)
return lbr, nil
@@ -943,22 +830,14 @@ func (lbr *SLoadbalancerListenerRule) SyncWithCloudLoadbalancerListenerRule(
syncOwnerId mcclient.IIdentityProvider,
provider *SCloudprovider,
) error {
// listener := lbr.GetLoadbalancerListener()
diff, err := db.UpdateWithLock(ctx, lbr, func() error {
lbr.constructFieldsFromCloudListenerRule(userCred, extRule)
// lbr.ManagerId = provider.Id
// lbr.CloudregionId = listener.CloudregionId
return nil
})
if err != nil {
return err
}
err = lbr.updateCachedLoadbalancerBackendGroupAssociate(ctx, extRule)
if err != nil {
return errors.Wrap(err, "LoadbalancerListenerRule.SyncWithCloudLoadbalancerListenerRule")
}
db.OpsLog.LogSyncUpdate(lbr, diff, userCred)
return nil