Merge pull request #9390 from swordqiu/hotfix/qj-network-reserved-ip-count-error

fix(region): network reserved ip count not consider expiration of reserved ips
This commit is contained in:
Zexi Li
2020-12-13 12:09:17 +08:00
committed by GitHub
2 changed files with 12 additions and 19 deletions
+4 -15
View File
@@ -147,16 +147,6 @@ func (self *SNetwork) GetNetworkInterfaces() ([]SNetworkInterface, error) {
return networkinterfaces, nil
}
func (self *SNetwork) GetReservedIPs() ([]SReservedip, error) {
reservedIps := []SReservedip{}
q := ReservedipManager.Query().Equals("network_id", self.Id)
err := db.FetchModelObjects(ReservedipManager, q, &reservedIps)
if err != nil {
return nil, errors.Wrap(err, "db.FetchModelObjects")
}
return reservedIps, nil
}
func (self *SNetwork) ValidateDeleteCondition(ctx context.Context) error {
cnt, err := self.GetAllocatedNicCount()
if err != nil {
@@ -306,7 +296,9 @@ func (self *SNetwork) GetBaremetalNicsCount() (int, error) {
}
func (self *SNetwork) GetReservedNicsCount() (int, error) {
return ReservedipManager.Query().Equals("network_id", self.Id).CountWithError()
q := ReservedipManager.Query().Equals("network_id", self.Id)
q = filterExpiredReservedIps(q)
return q.CountWithError()
}
func (self *SNetwork) GetLoadbalancerIpsCount() (int, error) {
@@ -1777,10 +1769,7 @@ func (self *SNetwork) RealDelete(ctx context.Context, userCred mcclient.TokenCre
return errors.Wrapf(err, "networkinterface.purge %s(%s)", networkinterfaces[i].Name, networkinterfaces[i].Id)
}
}
reservedIps, err := self.GetReservedIPs()
if err != nil {
return errors.Wrap(err, "GetReservedNicsCount")
}
reservedIps := ReservedipManager.GetReservedIPs(self)
for i := range reservedIps {
err = reservedIps[i].Release(ctx, userCred, self)
if err != nil {
+8 -4
View File
@@ -244,10 +244,7 @@ func (manager *SReservedipManager) ListItemFilter(
}
if query.All == nil || *query.All == false {
q = q.Filter(sqlchemy.OR(
sqlchemy.IsNullOrEmpty(q.Field("expired_at")),
sqlchemy.GT(q.Field("expired_at"), time.Now().UTC()),
))
q = filterExpiredReservedIps(q)
}
if len(query.IpAddr) > 0 {
@@ -260,6 +257,13 @@ func (manager *SReservedipManager) ListItemFilter(
return q, nil
}
func filterExpiredReservedIps(q *sqlchemy.SQuery) *sqlchemy.SQuery {
return q.Filter(sqlchemy.OR(
sqlchemy.IsNullOrEmpty(q.Field("expired_at")),
sqlchemy.GT(q.Field("expired_at"), time.Now().UTC()),
))
}
func (manager *SReservedipManager) OrderByExtraFields(
ctx context.Context,
q *sqlchemy.SQuery,