From e016109d6e20270121efb8704f896cc20f10814b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Sat, 22 Aug 2020 12:33:36 +0800 Subject: [PATCH] fix: avoid storage=nil, dis can not delete (#7610) Co-authored-by: Qu Xuan --- pkg/compute/tasks/disk_delete_task.go | 39 ++++++++++++++++----------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/pkg/compute/tasks/disk_delete_task.go b/pkg/compute/tasks/disk_delete_task.go index 64de1be6c8..40f9d1ffa6 100644 --- a/pkg/compute/tasks/disk_delete_task.go +++ b/pkg/compute/tasks/disk_delete_task.go @@ -101,10 +101,13 @@ func (self *DiskDeleteTask) startDeleteDisk(ctx context.Context, disk *models.SD ) storage = disk.GetStorage() - if storage != nil { - host = storage.GetMasterHost() + if storage == nil { // dirty data + self.OnGuestDiskDeleteComplete(ctx, disk, nil) + return } + host = storage.GetMasterHost() + isPurge := false if (host == nil || !host.GetEnabled()) && jsonutils.QueryBoolean(self.Params, "purge", false) { isPurge = true @@ -112,21 +115,25 @@ func (self *DiskDeleteTask) startDeleteDisk(ctx context.Context, disk *models.SD disk.SetStatus(self.UserCred, api.DISK_DEALLOC, "") if isPurge { self.OnGuestDiskDeleteComplete(ctx, disk, nil) + return + } + if isNeed, _ := disk.IsNeedWaitSnapshotsDeleted(); isNeed { // for kvm rbd disk + self.OnGuestDiskDeleteComplete(ctx, disk, nil) + return + } + if len(disk.BackupStorageId) > 0 { + self.SetStage("OnMasterStorageDeleteDiskComplete", nil) } else { - if isNeed, _ := disk.IsNeedWaitSnapshotsDeleted(); isNeed { - self.OnGuestDiskDeleteComplete(ctx, disk, nil) - return - } - if len(disk.BackupStorageId) > 0 { - self.SetStage("OnMasterStorageDeleteDiskComplete", nil) - } else { - self.SetStage("OnGuestDiskDeleteComplete", nil) - } - if host == nil { - self.OnGuestDiskDeleteCompleteFailed(ctx, disk, jsonutils.NewString("fail to find master host")) - } else if err := host.GetHostDriver().RequestDeallocateDiskOnHost(ctx, host, storage, disk, self); err != nil { - self.OnGuestDiskDeleteCompleteFailed(ctx, disk, jsonutils.NewString(err.Error())) - } + self.SetStage("OnGuestDiskDeleteComplete", nil) + } + if host == nil { + self.OnGuestDiskDeleteCompleteFailed(ctx, disk, jsonutils.NewString("fail to find master host")) + return + } + err := host.GetHostDriver().RequestDeallocateDiskOnHost(ctx, host, storage, disk, self) + if err != nil { + self.OnGuestDiskDeleteCompleteFailed(ctx, disk, jsonutils.NewString(err.Error())) + return } }