Merge pull request #5436 from swordqiu/hotfix/qj-remove-manager-cloudregion-id

fix: sql query errors for missing manager_id and cloudregion_id
This commit is contained in:
yunion-ci-robot
2020-03-10 18:25:58 +08:00
committed by GitHub
3 changed files with 24 additions and 9 deletions
+5 -2
View File
@@ -191,9 +191,12 @@ func (self *SCloudregion) GetDBInstanceBackups(provider *SCloudprovider, instanc
func (self *SCloudregion) GetElasticcaches(provider *SCloudprovider) ([]SElasticcache, error) {
instances := []SElasticcache{}
// .IsFalse("pending_deleted")
q := ElasticcacheManager.Query().Equals("cloudregion_id", self.Id)
vpcs := VpcManager.Query().SubQuery()
q := ElasticcacheManager.Query()
q = q.Join(vpcs, sqlchemy.Equals(q.Field("vpc_id"), vpcs.Field("id")))
q = q.Filter(sqlchemy.Equals(vpcs.Field("cloudregion_id"), self.Id))
if provider != nil {
q = q.Equals("manager_id", provider.Id)
q = q.Filter(sqlchemy.Equals(vpcs.Field("manager_id"), provider.Id))
}
err := db.FetchModelObjects(ElasticcacheManager, q, &instances)
if err != nil {
+12 -2
View File
@@ -590,7 +590,12 @@ func (lb *SLoadbalancer) Delete(ctx context.Context, userCred mcclient.TokenCred
func (man *SLoadbalancerManager) getLoadbalancersByRegion(region *SCloudregion, provider *SCloudprovider) ([]SLoadbalancer, error) {
lbs := []SLoadbalancer{}
q := man.Query().Equals("cloudregion_id", region.Id).Equals("manager_id", provider.Id).IsFalse("pending_deleted")
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.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)
return nil, err
@@ -914,7 +919,12 @@ func (manager *SLoadbalancerManager) GetResourceCount() ([]db.SProjectResourceCo
func (manager *SLoadbalancerManager) FetchByExternalId(providerId string, extId string) (*SLoadbalancer, error) {
ret := []SLoadbalancer{}
q := manager.Query().Equals("manager_id", providerId).Equals("external_id", extId)
vpcs := VpcManager.Query().SubQuery()
q := manager.Query()
q = q.Join(vpcs, sqlchemy.Equals(q.Field("vpc_id"), vpcs.Field("id")))
q = q.Filter(sqlchemy.Equals(vpcs.Field("manager_id"), providerId))
q = q.Equals("external_id", extId)
q = q.IsFalse("pending_deleted")
err := db.FetchModelObjects(manager, q, &ret)
if err != nil {
return nil, err
+7 -5
View File
@@ -100,17 +100,19 @@ func GetModels(opts *GetModelsOptions) error {
return newTime, nil
}
isManaged := false
listOptions := options.BaseListOptions{
Admin: options.Bool(true),
Details: options.Bool(true),
Filter: []string{
minUpdatedAtFilter(minUpdatedAt), // order matters, filter.0
"manager_id.isnullorempty()", // len(manager_id) > 0 is for pubcloud objects
// "manager_id.isnullorempty()", // len(manager_id) > 0 is for pubcloud objects
},
OrderBy: []string{"updated_at", "id"},
Order: "asc",
Limit: options.Int(opts.BatchListSize),
Offset: options.Int(0),
OrderBy: []string{"updated_at", "id"},
Order: "asc",
IsManaged: &isManaged,
Limit: options.Int(opts.BatchListSize),
Offset: options.Int(0),
}
if !minUpdatedAt.Equal(PseudoZeroTime) {
// Only fetching pending deletes when we are doing incremental fetch