Merge pull request #897 in YUNIONIO/onecloud from ~QUXUAN/onecloud:hotfix/qx-detach-disk-status to release/2.4.0

* commit '8fe57af4a2831f55bca5dc97d0a9e02ab6fceb2e':
  卸载磁盘时状态为init的,默认进行删除操作,并直接设置磁盘状态未卸载中
This commit is contained in:
邱剑
2019-01-05 20:15:18 +08:00
2 changed files with 10 additions and 14 deletions
+9 -3
View File
@@ -1201,12 +1201,18 @@ func (self *SGuest) PerformDetachdisk(ctx context.Context, userCred mcclient.Tok
}
func (self *SGuest) StartGuestDetachdiskTask(ctx context.Context, userCred mcclient.TokenCredential, disk *SDisk, keepDisk bool, parentTaskId string) error {
if disk.Status == DISK_INIT {
disk.SetStatus(userCred, DISK_DETACHING, "")
}
taskData := jsonutils.NewDict()
taskData.Add(jsonutils.NewString(disk.Id), "disk_id")
taskData.Add(jsonutils.NewBool(keepDisk), "keep_disk")
if utils.IsInStringArray(disk.Status, []string{DISK_INIT, DISK_ALLOC_FAILED}) {
//删除非正常状态下的disk
taskData.Add(jsonutils.JSONFalse, "keep_disk")
disk.GetModelManager().TableSpec().Update(disk, func() error {
disk.AutoDelete = true
return nil
})
}
disk.SetStatus(userCred, DISK_DETACHING, "")
return self.GetDriver().StartGuestDetachdiskTask(ctx, userCred, self, taskData, "")
}
+1 -11
View File
@@ -44,12 +44,6 @@ func (self *GuestDetachDiskTask) OnInit(ctx context.Context, obj db.IStandaloneM
}
guest.DetachDisk(ctx, disk, self.UserCred)
if disk.Status == models.DISK_INIT {
self.OnSyncConfigComplete(ctx, guest, nil)
return
}
disk.SetStatus(self.UserCred, models.DISK_DETACHING, "Disk detach")
host := guest.GetHost()
purge := false
if host != nil && host.Status == models.HOST_DISABLED && jsonutils.QueryBoolean(self.Params, "purge", false) {
@@ -87,11 +81,7 @@ func (self *GuestDetachDiskTask) OnSyncConfigComplete(ctx context.Context, guest
if host != nil && host.Status == models.HOST_DISABLED && jsonutils.QueryBoolean(self.Params, "purge", false) {
purge = true
}
if disk.Status == models.DISK_INIT {
db.OpsLog.LogEvent(disk, db.ACT_DELETE, "", self.UserCred)
disk.RealDelete(ctx, self.UserCred)
self.SetStageComplete(ctx, nil)
} else if (disk.Status != models.DISK_READY || !keepDisk) && disk.GetGuestDiskCount() == 0 && disk.AutoDelete {
if !keepDisk && disk.GetGuestDiskCount() == 0 && disk.AutoDelete {
self.SetStage("on_disk_delete_complete", nil)
db.OpsLog.LogEvent(disk, db.ACT_DELETE, "", self.UserCred)
err := guest.GetDriver().RequestDeleteDetachedDisk(ctx, disk, self, purge)