From f2f46e0a212fa4c3d0bc3dde34a9108f6f5a5b3d Mon Sep 17 00:00:00 2001 From: wanyaoqi Date: Wed, 8 May 2019 12:14:32 +0800 Subject: [PATCH] fix sync status on stoping --- pkg/compute/tasks/guest_live_migrate_task.go | 2 +- pkg/hostman/guestman/guestman.go | 7 +++---- pkg/hostman/guestman/guesttasks.go | 2 ++ pkg/hostman/guestman/qemu-kvm.go | 5 +++++ 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/pkg/compute/tasks/guest_live_migrate_task.go b/pkg/compute/tasks/guest_live_migrate_task.go index 1481477760..50ca9fceb4 100644 --- a/pkg/compute/tasks/guest_live_migrate_task.go +++ b/pkg/compute/tasks/guest_live_migrate_task.go @@ -396,7 +396,7 @@ func (self *GuestLiveMigrateTask) OnResumeDestGuestComplete(ctx context.Context, } func (self *GuestLiveMigrateTask) OnUndeploySrcGuestComplete(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { - db.OpsLog.LogEvent(guest, db.ACT_MIGRATE, "", self.UserCred) + db.OpsLog.LogEvent(guest, db.ACT_MIGRATE, "OnUndeploySrcGuestComplete", self.UserCred) status, _ := self.Params.GetString("guest_status") if status != guest.Status { self.SetStage("OnGuestSyncStatus", nil) diff --git a/pkg/hostman/guestman/guestman.go b/pkg/hostman/guestman/guestman.go index cdf9101d2f..659814ec04 100644 --- a/pkg/hostman/guestman/guestman.go +++ b/pkg/hostman/guestman/guestman.go @@ -351,12 +351,11 @@ func (m *SGuestManager) CpusetBalance(ctx context.Context, params interface{}) ( } func (m *SGuestManager) Status(sid string) string { - if status := m.GetStatus(sid); status == GUEST_RUNNING && m.Servers[sid].Monitor == nil { + status := m.GetStatus(sid) + if status == GUEST_RUNNING && m.Servers[sid].Monitor == nil && !m.Servers[sid].IsStopping() { m.Servers[sid].StartMonitor(context.Background()) - return status - } else { - return status } + return status } func (m *SGuestManager) GetStatus(sid string) string { diff --git a/pkg/hostman/guestman/guesttasks.go b/pkg/hostman/guestman/guesttasks.go index 0946f8afcb..f1777ce959 100644 --- a/pkg/hostman/guestman/guesttasks.go +++ b/pkg/hostman/guestman/guesttasks.go @@ -61,6 +61,7 @@ func NewGuestStopTask(guest *SKVMGuestInstance, ctx context.Context, timeout int } func (s *SGuestStopTask) Start() { + s.stopping = true if s.IsRunning() && s.IsMonitorAlive() { s.Monitor.SimpleCommand("system_powerdown", s.onPowerdownGuest) } else { @@ -77,6 +78,7 @@ func (s *SGuestStopTask) onPowerdownGuest(results string) { func (s *SGuestStopTask) checkGuestRunning() { if !s.IsRunning() || time.Now().Sub(s.startPowerdown) > time.Duration(s.timeout)*time.Second { s.Stop() // force stop + s.stopping = false hostutils.TaskComplete(s.ctx, nil) } else { s.CheckGuestRunningLater() diff --git a/pkg/hostman/guestman/qemu-kvm.go b/pkg/hostman/guestman/qemu-kvm.go index aa20e818d5..d5b5eef22a 100644 --- a/pkg/hostman/guestman/qemu-kvm.go +++ b/pkg/hostman/guestman/qemu-kvm.go @@ -68,6 +68,7 @@ type SKVMGuestInstance struct { manager *SGuestManager startupTask *SGuestResumeTask + stopping bool } func NewKVMGuestInstance(id string, manager *SGuestManager) *SKVMGuestInstance { @@ -77,6 +78,10 @@ func NewKVMGuestInstance(id string, manager *SGuestManager) *SKVMGuestInstance { } } +func (s *SKVMGuestInstance) IsStopping() bool { + return s.stopping +} + func (s *SKVMGuestInstance) GetId() string { id, _ := s.Desc.GetString("uuid") return id