From e93e9a0a8a8e66812b4e9ecfe797a667987407d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Wed, 18 Jun 2025 14:15:05 +0800 Subject: [PATCH] fix(region): lb listener rule associate backend group (#22735) --- .../models/loadbalancerlistenerrules.go | 145 ++---------------- 1 file changed, 12 insertions(+), 133 deletions(-) diff --git a/pkg/compute/models/loadbalancerlistenerrules.go b/pkg/compute/models/loadbalancerlistenerrules.go index 69b11cc62b..f1683b7493 100644 --- a/pkg/compute/models/loadbalancerlistenerrules.go +++ b/pkg/compute/models/loadbalancerlistenerrules.go @@ -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