fix: cancel pending-delete should increase resource quota usages

This commit is contained in:
Qiu Jian
2020-10-19 16:02:50 +08:00
parent 0ffda5712a
commit 2486aa3071
8 changed files with 58 additions and 11 deletions
+23 -2
View File
@@ -246,9 +246,12 @@ func (gi *SGuestImage) AllowPerformCancelDelete(ctx context.Context, userCred mc
func (gi *SGuestImage) PerformCancelDelete(ctx context.Context, userCred mcclient.TokenCredential,
query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) {
if gi.PendingDeleted {
if gi.PendingDeleted && !gi.Deleted {
err := gi.DoCancelPendingDelete(ctx, userCred)
return nil, err
if err != nil {
return nil, errors.Wrap(err, "DoCancelPendingDelete")
}
gi.RecoverUsages(ctx, userCred)
}
return nil, nil
}
@@ -635,3 +638,21 @@ func (manager *SGuestImageManager) Usage(scope rbacutils.TRbacScope, ownerId mcc
return usages
}
func (gi *SGuestImage) GetUsages() []db.IUsage {
if gi.PendingDeleted || gi.Deleted {
return nil
}
images, err := GuestImageJointManager.GetImagesByGuestImageId(gi.Id)
if err != nil {
return nil
}
usages := make([]db.IUsage, 0)
for i := range images {
ui := images[i].GetUsages()
if len(ui) > 0 {
usages = append(usages, ui...)
}
}
return usages
}
+2 -1
View File
@@ -16,6 +16,7 @@ package models
import (
"context"
"database/sql"
"yunion.io/x/pkg/errors"
"yunion.io/x/sqlchemy"
@@ -102,7 +103,7 @@ func (gm *SGuestImageJointManager) GetImagesByFilter(guestImageId string,
q = filter(q)
images := make([]SImage, 0, len(imageIds))
err = db.FetchModelObjects(ImageManager, q, &images)
if err != nil {
if err != nil && errors.Cause(err) != sql.ErrNoRows {
return nil, errors.Wrap(err, "fetch images failed")
}
return images, nil
+5 -2
View File
@@ -806,9 +806,12 @@ func (self *SImage) AllowPerformCancelDelete(ctx context.Context, userCred mccli
}
func (self *SImage) PerformCancelDelete(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) {
if self.PendingDeleted {
if self.PendingDeleted && !self.Deleted {
err := self.DoCancelPendingDelete(ctx, userCred)
return nil, err
if err != nil {
return nil, errors.Wrap(err, "DoCancelPendingDelete")
}
self.RecoverUsages(ctx, userCred)
}
return nil, nil
}