Merge pull request #5648 from swordqiu/hotfix/qj-cancel-quota-no-save-usage

fix: cancel pending usage might not need to update usage
This commit is contained in:
Zexi Li
2020-04-01 18:05:41 +08:00
committed by GitHub
20 changed files with 68 additions and 54 deletions
+1 -1
View File
@@ -1659,7 +1659,7 @@ func objectUpdateSpec(dispatcher *DBModelDispatcher, model IModel, modelValue re
func DeleteModel(ctx context.Context, userCred mcclient.TokenCredential, item IModel) error {
// log.Debugf("Ready to delete %s %s %#v", jsonutils.Marshal(item), item, manager)
cleanModelUsages(ctx, userCred, item)
// cleanModelUsages(ctx, userCred, item)
_, err := Update(item, func() error {
return item.MarkDelete()
})
+2 -1
View File
@@ -74,7 +74,8 @@ func cancelPendingUsagesInContext(ctx context.Context, userCred mcclient.TokenCr
}
errs := make([]error, 0)
for i := range quotas {
err := CancelPendingUsage(ctx, userCred, quotas[i], quotas[i])
// cancel and do not save pending usage
err := CancelPendingUsage(ctx, userCred, quotas[i], quotas[i], false)
if err != nil {
errs = append(errs, errors.Wrapf(err, "CancelPendingUsage %s", jsonutils.Marshal(quotas[i])))
}
+1 -1
View File
@@ -69,7 +69,7 @@ type IQuotaManager interface {
db.IResourceModelManager
checkSetPendingQuota(ctx context.Context, userCred mcclient.TokenCredential, quota IQuota) error
cancelPendingUsage(ctx context.Context, userCred mcclient.TokenCredential, localUsage IQuota, cancelUsage IQuota) error
cancelPendingUsage(ctx context.Context, userCred mcclient.TokenCredential, localUsage IQuota, cancelUsage IQuota, save bool) error
cancelUsage(ctx context.Context, userCred mcclient.TokenCredential, usage IQuota) error
getQuotaCount(ctx context.Context, request IQuota, pendingKey IQuotaKeys) (int, error)
+8 -6
View File
@@ -66,14 +66,14 @@ func (manager *SQuotaBaseManager) _cleanPendingUsage(ctx context.Context, userCr
return nil
}
func (manager *SQuotaBaseManager) cancelPendingUsage(ctx context.Context, userCred mcclient.TokenCredential, localUsage IQuota, cancelUsage IQuota) error {
func (manager *SQuotaBaseManager) cancelPendingUsage(ctx context.Context, userCred mcclient.TokenCredential, localUsage IQuota, cancelUsage IQuota, save bool) error {
LockQuota(ctx, manager, localUsage)
defer ReleaseQuota(ctx, manager, localUsage)
return manager._cancelPendingUsage(ctx, userCred, localUsage, cancelUsage)
return manager._cancelPendingUsage(ctx, userCred, localUsage, cancelUsage, save)
}
func (manager *SQuotaBaseManager) _cancelPendingUsage(ctx context.Context, userCred mcclient.TokenCredential, localUsage IQuota, cancelUsage IQuota) error {
func (manager *SQuotaBaseManager) _cancelPendingUsage(ctx context.Context, userCred mcclient.TokenCredential, localUsage IQuota, cancelUsage IQuota, save bool) error {
originKeys := localUsage.GetKeys()
// currentKeys := cancelUsage.GetKeys()
@@ -92,9 +92,11 @@ func (manager *SQuotaBaseManager) _cancelPendingUsage(ctx context.Context, userC
log.Debugf("cancelUsage: %s localUsage: %s pendingUsage: %s", jsonutils.Marshal(cancelUsage), jsonutils.Marshal(localUsage), jsonutils.Marshal(pendingUsage))
err = manager.changeUsage(ctx, userCred, pendingUsage, true)
if err != nil {
return errors.Wrap(err, "manager.changelUsage")
if save {
err = manager.changeUsage(ctx, userCred, pendingUsage, true)
if err != nil {
return errors.Wrap(err, "manager.changelUsage")
}
}
return nil
+2 -2
View File
@@ -55,9 +55,9 @@ func getQuotaManager(quota IQuota) IQuotaManager {
}
}
func CancelPendingUsage(ctx context.Context, userCred mcclient.TokenCredential, localUsage IQuota, cancelUsage IQuota) error {
func CancelPendingUsage(ctx context.Context, userCred mcclient.TokenCredential, localUsage IQuota, cancelUsage IQuota, save bool) error {
manager := getQuotaManager(cancelUsage)
return manager.cancelPendingUsage(ctx, userCred, localUsage, cancelUsage)
return manager.cancelPendingUsage(ctx, userCred, localUsage, cancelUsage, save)
}
func CheckSetPendingQuota(ctx context.Context, userCred mcclient.TokenCredential, quota IQuota) error {