From 8c201e76026ea2babfaec469eed464cc89d637e3 Mon Sep 17 00:00:00 2001 From: wanyaoqi Date: Sat, 4 Jan 2020 14:33:57 +0800 Subject: [PATCH 1/2] fix disk filter by guest --- pkg/compute/models/disks.go | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/pkg/compute/models/disks.go b/pkg/compute/models/disks.go index 6675d889be..f3a811c1e5 100644 --- a/pkg/compute/models/disks.go +++ b/pkg/compute/models/disks.go @@ -216,14 +216,11 @@ func (manager *SDiskManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQu return nil, err } guest := iGuest.(*SGuest) - hoststorages := HoststorageManager.Query().SubQuery() - q = q.Join(hoststorages, sqlchemy.AND( - sqlchemy.Equals(hoststorages.Field("host_id"), guest.HostId), - sqlchemy.IsFalse(hoststorages.Field("deleted")))). - Join(storages, sqlchemy.AND( - sqlchemy.Equals(storages.Field("id"), hoststorages.Field("storage_id")), - sqlchemy.IsFalse(storages.Field("deleted")))). - Filter(sqlchemy.Equals(storages.Field("id"), q.Field("storage_id"))) + guestDisks := GuestdiskManager.Query().SubQuery() + q = q.Join(guestDisks, sqlchemy.AND( + sqlchemy.Equals(guestDisks.Field("disk_id"), q.Field("id")), + sqlchemy.Equals(guestDisks.Field("guest_id"), guest.Id), + )) } storageStr := jsonutils.GetAnyString(queryDict, []string{"storage", "storage_id"}) From ce961db08523c9cb429b5b38be5f14bd932314b3 Mon Sep 17 00:00:00 2001 From: wanyaoqi Date: Sat, 4 Jan 2020 15:15:06 +0800 Subject: [PATCH 2/2] add recover on guest suddenly shotdown --- pkg/compute/tasks/instance_snapshot_create_task.go | 4 ++-- pkg/hostman/guestman/guestman.go | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/pkg/compute/tasks/instance_snapshot_create_task.go b/pkg/compute/tasks/instance_snapshot_create_task.go index 937c203abf..c4ed9742a0 100644 --- a/pkg/compute/tasks/instance_snapshot_create_task.go +++ b/pkg/compute/tasks/instance_snapshot_create_task.go @@ -63,7 +63,7 @@ func (self *InstanceSnapshotCreateTask) taskFail( guest.SetStatus(self.UserCred, compute.VM_INSTANCE_SNAPSHOT_FAILED, reason) db.OpsLog.LogEvent(isp, db.ACT_ALLOCATE_FAIL, reason, self.UserCred) - logclient.AddActionLogWithStartable(self, isp, logclient.ACT_CREATE, false, self.UserCred, false) + logclient.AddActionLogWithStartable(self, isp, logclient.ACT_CREATE, reason, self.UserCred, false) notifyclient.NotifySystemError(isp.GetId(), isp.Name, compute.INSTANCE_SNAPSHOT_FAILED, reason) self.SetStageFailed(ctx, reason) } @@ -79,7 +79,7 @@ func (self *InstanceSnapshotCreateTask) taskComplete( guest.StartSyncstatus(ctx, self.UserCred, "") db.OpsLog.LogEvent(isp, db.ACT_ALLOCATE, "instance snapshot create success", self.UserCred) - logclient.AddActionLogWithStartable(self, isp, logclient.ACT_CREATE, false, self.UserCred, true) + logclient.AddActionLogWithStartable(self, isp, logclient.ACT_CREATE, "", self.UserCred, true) self.SetStageComplete(ctx, nil) } diff --git a/pkg/hostman/guestman/guestman.go b/pkg/hostman/guestman/guestman.go index baf4a1ba9e..c22c9fecba 100644 --- a/pkg/hostman/guestman/guestman.go +++ b/pkg/hostman/guestman/guestman.go @@ -767,6 +767,12 @@ func (m *SGuestManager) CancelBlockJobs(ctx context.Context, params interface{}) if !ok { return nil, hostutils.ParamsError } + defer func() { + if r := recover(); r != nil { + log.Errorf("STACK: %v \n %s", r, debug.Stack()) + hostutils.TaskFailed(ctx, fmt.Sprintf("recover: %v", r)) + } + }() guest, _ := m.GetServer(sid) NewCancelBlockJobsTask(ctx, guest).Start() return nil, nil