mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-01 15:07:17 +08:00
Merge pull request #3111 from swordqiu/hotfix/qj-snapshot-real-delete-nil-pointer
fix: snapshot realdelete nil pointer panic
This commit is contained in:
@@ -558,22 +558,24 @@ func (self *SSnapshot) StartSnapshotsDeleteTask(ctx context.Context, userCred mc
|
||||
func (self *SSnapshot) RealDelete(ctx context.Context, userCred mcclient.TokenCredential) error {
|
||||
if len(self.DiskId) > 0 {
|
||||
storage := self.GetStorage()
|
||||
disk := DiskManager.FetchDiskById(self.DiskId)
|
||||
if disk != nil && storage.StorageType == api.STORAGE_RBD {
|
||||
cnt, err := disk.GetGuestsCount()
|
||||
if err == nil {
|
||||
val := disk.GetMetadata("disk_delete_after_snapshots", userCred)
|
||||
if cnt == 0 && val == "true" {
|
||||
disk.StartDiskDeleteTask(ctx, userCred, "", false, true)
|
||||
if storage != nil && storage.StorageType == api.STORAGE_RBD {
|
||||
disk := DiskManager.FetchDiskById(self.DiskId)
|
||||
if disk != nil {
|
||||
cnt, err := disk.GetGuestsCount()
|
||||
if err == nil {
|
||||
val := disk.GetMetadata("disk_delete_after_snapshots", userCred)
|
||||
if cnt == 0 && val == "true" {
|
||||
disk.StartDiskDeleteTask(ctx, userCred, "", false, true)
|
||||
}
|
||||
} else {
|
||||
// very unlikely
|
||||
log.Errorf("disk.GetGuestsCount fail %s", err)
|
||||
}
|
||||
} else {
|
||||
log.Errorln(err)
|
||||
}
|
||||
} else {
|
||||
if storage.StorageType == api.STORAGE_RBD {
|
||||
backingDisks, err := self.GetBackingDisks()
|
||||
if err != nil {
|
||||
log.Errorln(err)
|
||||
// very unlikely
|
||||
log.Errorf("self.GetBackingDisks fail %s", err)
|
||||
} else {
|
||||
storage.StartDeleteRbdDisks(ctx, userCred, backingDisks)
|
||||
}
|
||||
|
||||
@@ -80,7 +80,9 @@ func (self *GuestSyncConfTask) OnDiskSyncCompleteFailed(ctx context.Context, obj
|
||||
|
||||
func (self *GuestSyncConfTask) OnSyncCompleteFailed(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) {
|
||||
guest := obj.(*models.SGuest)
|
||||
guest.SetStatus(self.GetUserCred(), api.VM_SYNC_FAIL, data.String())
|
||||
if !jsonutils.QueryBoolean(self.Params, "without_sync_status", false) {
|
||||
guest.SetStatus(self.GetUserCred(), api.VM_SYNC_FAIL, data.String())
|
||||
}
|
||||
log.Errorf("Guest sync config failed: %v", data.String())
|
||||
db.OpsLog.LogEvent(guest, db.ACT_SYNC_CONF_FAIL, data.String(), self.UserCred)
|
||||
self.SetStageFailed(ctx, data.String())
|
||||
|
||||
Reference in New Issue
Block a user