From 4e85b1cd5a011d3c54d5939e87053e3f2f840dad Mon Sep 17 00:00:00 2001 From: Qiu Jian Date: Tue, 12 Mar 2019 15:07:13 +0800 Subject: [PATCH] fix: usage port state not correct --- pkg/compute/models/networks.go | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/pkg/compute/models/networks.go b/pkg/compute/models/networks.go index 1e18825561..911082c89f 100644 --- a/pkg/compute/models/networks.go +++ b/pkg/compute/models/networks.go @@ -633,7 +633,7 @@ func (manager *SNetworkManager) allNetworksQ(providers []string, rangeObj db.ISt networks := manager.Query().SubQuery() hostwires := HostwireManager.Query().SubQuery() hosts := HostManager.Query().SubQuery() - q := networks.Query() + q := networks.Query(networks.Field("id")) q = q.Join(hostwires, sqlchemy.Equals(hostwires.Field("wire_id"), networks.Field("wire_id"))) q = q.Join(hosts, sqlchemy.Equals(hosts.Field("id"), hostwires.Field("host_id"))) q = q.Filter(sqlchemy.IsTrue(hosts.Field("enabled"))) @@ -645,13 +645,12 @@ func (manager *SNetworkManager) allNetworksQ(providers []string, rangeObj db.ISt func (manager *SNetworkManager) totalPortCountQ(userCred mcclient.TokenCredential, providers []string, rangeObj db.IStandaloneModel) *sqlchemy.SQuery { q := manager.allNetworksQ(providers, rangeObj) - networks := manager.Query().SubQuery() if userCred != nil && !db.IsAdminAllowList(userCred, manager) { q = q.Filter(sqlchemy.OR( - sqlchemy.Equals(networks.Field("tenant_id"), userCred.GetProjectId()), - sqlchemy.IsTrue(networks.Field("is_public")))) + sqlchemy.Equals(q.Field("tenant_id"), userCred.GetProjectId()), + sqlchemy.IsTrue(q.Field("is_public")))) } - return q + return manager.Query().In("id", q.Distinct().SubQuery()) } type NetworkPortStat struct { @@ -659,7 +658,11 @@ type NetworkPortStat struct { CountExt int } -func (manager *SNetworkManager) TotalPortCount(userCred mcclient.TokenCredential, providers []string, rangeObj db.IStandaloneModel) NetworkPortStat { +func (manager *SNetworkManager) TotalPortCount( + userCred mcclient.TokenCredential, + providers []string, + rangeObj db.IStandaloneModel, +) NetworkPortStat { nets := make([]SNetwork, 0) err := manager.totalPortCountQ(userCred, providers, rangeObj).All(&nets) if err != nil {