fix clone clean pending usage

This commit is contained in:
wanyaoqi
2020-07-23 18:39:02 +08:00
parent b627985733
commit a8a2f07742
2 changed files with 8 additions and 5 deletions
+3
View File
@@ -4623,6 +4623,9 @@ func (self *SGuest) PerformSnapshotAndClone(
quotas.CancelPendingUsage(ctx, userCred, &pendingUsage, &pendingUsage, false)
quotas.CancelPendingUsage(ctx, userCred, &pendingRegionUsage, &pendingRegionUsage, false)
return nil, httperrors.NewInternalServerError("create instance snapshot failed: %s", err)
} else {
cancelRegionUsage := &SRegionQuota{Snapshot: snapshotUsage.Snapshot}
quotas.CancelPendingUsage(ctx, userCred, &pendingRegionUsage, cancelRegionUsage, true)
}
err = self.StartInstanceSnapshotAndCloneTask(
@@ -50,7 +50,7 @@ func (self *InstanceSnapshotAndCloneTask) taskFailed(
func (self *InstanceSnapshotAndCloneTask) taskComplete(
ctx context.Context, isp *models.SInstanceSnapshot, data jsonutils.JSONObject) {
self.finalReleasePendingUsage(ctx)
self.finalReleasePendingUsage(ctx, true)
guest := models.GuestManager.FetchGuestById(isp.GuestId)
guest.StartSyncstatus(ctx, self.UserCred, "")
db.OpsLog.LogEvent(guest, db.ACT_VM_SNAPSHOT_AND_CLONE, "", self.UserCred)
@@ -60,21 +60,21 @@ func (self *InstanceSnapshotAndCloneTask) taskComplete(
}
func (self *InstanceSnapshotAndCloneTask) SetStageFailed(ctx context.Context, reason string) {
self.finalReleasePendingUsage(ctx)
self.finalReleasePendingUsage(ctx, false)
self.STask.SetStageFailed(ctx, reason)
}
func (self *InstanceSnapshotAndCloneTask) finalReleasePendingUsage(ctx context.Context) {
func (self *InstanceSnapshotAndCloneTask) finalReleasePendingUsage(ctx context.Context, success bool) {
pendingUsage := models.SQuota{}
err := self.GetPendingUsage(&pendingUsage, 0)
if err == nil && !pendingUsage.IsEmpty() {
quotas.CancelPendingUsage(ctx, self.UserCred, &pendingUsage, &pendingUsage, false) // failure cleanup
quotas.CancelPendingUsage(ctx, self.UserCred, &pendingUsage, &pendingUsage, success)
}
pendingRegionUsage := models.SRegionQuota{}
err = self.GetPendingUsage(&pendingRegionUsage, 1)
if err == nil && !pendingRegionUsage.IsEmpty() {
quotas.CancelPendingUsage(ctx, self.UserCred, &pendingRegionUsage, &pendingRegionUsage, false) // failure cleanup
quotas.CancelPendingUsage(ctx, self.UserCred, &pendingRegionUsage, &pendingRegionUsage, success)
}
}