Merge pull request #3111 from swordqiu/hotfix/qj-snapshot-real-delete-nil-pointer

fix: snapshot realdelete nil pointer panic
This commit is contained in:
yunion-ci-robot
2019-10-05 07:36:35 +08:00
committed by GitHub
2 changed files with 17 additions and 13 deletions
+14 -12
View File
@@ -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)
}
+3 -1
View File
@@ -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())