From 3c844caa4bd6c95abbddbd3dabfcddf5a06b3ade Mon Sep 17 00:00:00 2001 From: Qu Xuan Date: Tue, 22 Jun 2021 17:11:14 +0800 Subject: [PATCH] fix(hostman): show server status changed reason --- pkg/hostman/guestman/guesttasks.go | 12 +++++----- pkg/hostman/guestman/qemu-kvm.go | 35 +++++++++++++++--------------- pkg/hostman/hostutils/hostutils.go | 5 ++++- 3 files changed, 27 insertions(+), 25 deletions(-) diff --git a/pkg/hostman/guestman/guesttasks.go b/pkg/hostman/guestman/guesttasks.go index 422b680c77..3b1cc602d6 100644 --- a/pkg/hostman/guestman/guesttasks.go +++ b/pkg/hostman/guestman/guesttasks.go @@ -593,7 +593,7 @@ func (s *SGuestResumeTask) taskFailed(reason string) { if s.ctx != nil && len(appctx.AppContextTaskId(s.ctx)) > 0 { hostutils.TaskFailed(s.ctx, reason) } else { - s.SyncStatus() + s.SyncStatus(reason) } } @@ -632,12 +632,12 @@ func (s *SGuestResumeTask) onStartRunning() { if len(disksIdx) > 0 { s.startStreamDisks(disksIdx) } else if options.HostOptions.AutoMergeBackingTemplate { - s.SyncStatus() + s.SyncStatus("") timeutils2.AddTimeout( time.Second*time.Duration(options.HostOptions.AutoMergeDelaySeconds), func() { s.startStreamDisks(nil) }) } else { - s.SyncStatus() + s.SyncStatus("") } } @@ -663,7 +663,7 @@ func (s *SGuestResumeTask) startStreamDisks(disksIdx []int) { func (s *SGuestResumeTask) onStreamComplete(disksIdx []int) { if len(disksIdx) == 0 { // if disks idx length == 0 indicate merge backing template - s.SyncStatus() + s.SyncStatus("") } else { s.streamDisksComplete(context.Background()) } @@ -747,7 +747,7 @@ func (s *SGuestStreamDisksTask) onBlockDrivesSucc(res *jsonutils.JSONArray) { s.taskComplete() } else { s.startDoBlockStream() - s.SyncStatus() + s.SyncStatus("") } } @@ -783,7 +783,7 @@ func (s *SGuestStreamDisksTask) checkStreamJobs(jobs int) { } func (s *SGuestStreamDisksTask) taskComplete() { - s.SyncStatus() + s.SyncStatus("") // XXX: region disk post-migrate not implement diff --git a/pkg/hostman/guestman/qemu-kvm.go b/pkg/hostman/guestman/qemu-kvm.go index c0211e057a..2cfb59852c 100644 --- a/pkg/hostman/guestman/qemu-kvm.go +++ b/pkg/hostman/guestman/qemu-kvm.go @@ -279,14 +279,13 @@ func (s *SKVMGuestInstance) asyncScriptStart(ctx context.Context, params interfa s.syncMeta = s.CleanImportMetadata() s.StartMonitor(ctx) return nil, nil - } else { - log.Infof("Async start server %s failed: %s!!!", s.GetName(), err) - if ctx != nil && len(appctx.AppContextTaskId(ctx)) >= 0 { - hostutils.TaskFailed(ctx, fmt.Sprintf("Async start server failed: %s", err)) - } - s.SyncStatus() - return nil, err } + log.Infof("Async start server %s failed: %s!!!", s.GetName(), err) + if ctx != nil && len(appctx.AppContextTaskId(ctx)) >= 0 { + hostutils.TaskFailed(ctx, fmt.Sprintf("Async start server failed: %s", err)) + } + s.SyncStatus("") + return nil, err } func (s *SKVMGuestInstance) saveScripts(data *jsonutils.JSONDict) error { @@ -335,7 +334,7 @@ func (s *SKVMGuestInstance) ImportServer(pendingDelete bool) { } log.Infof("%s is %s, pending_delete=%t", s.GetName(), action, pendingDelete) if !s.IsSlave() { - s.SyncStatus() + s.SyncStatus("") } } } @@ -374,8 +373,8 @@ func (s *SKVMGuestInstance) IsMonitorAlive() bool { // } func (s *SKVMGuestInstance) onImportGuestMonitorDisConnect(err error) { - log.Infof("Import Guest %s monitor disconnect", s.Id) - s.SyncStatus() + log.Infof("Import Guest %s monitor disconnect reason: %v", s.Id, err) + s.SyncStatus(fmt.Sprintf("import guest monitor disconnect %v", err)) // clean import pid file if s.GetPid() == -2 { @@ -407,7 +406,7 @@ func (s *SKVMGuestInstance) onImportGuestMonitorConnected(ctx context.Context) { meta.Set("hot_remove_nic", jsonutils.NewString("disable")) meta.Set("__qemu_version", jsonutils.NewString(s.GetQemuVersionStr())) s.SyncMetadata(meta) - s.SyncStatus() + s.SyncStatus("") }) } @@ -470,7 +469,7 @@ func (s *SKVMGuestInstance) onReceiveQMPEvent(event *monitor.Event) { if stype == "mirror" { mirrorStatus := s.MirrorJobStatus() if mirrorStatus.IsSucc() { - _, err := hostutils.UpdateServerStatus(context.Background(), s.GetId(), compute.VM_RUNNING) + _, err := hostutils.UpdateServerStatus(context.Background(), s.GetId(), compute.VM_RUNNING, "BLOCK_JOB_READY") if err != nil { log.Errorf("onReceiveQMPEvent update server status error: %s", err) } @@ -549,11 +548,11 @@ func (s *SKVMGuestInstance) onGetQemuVersion(ctx context.Context, version string } func (s *SKVMGuestInstance) onMonitorDisConnect(err error) { - log.Infof("Guest %s on Monitor Disconnect", s.Id) + log.Errorf("Guest %s on Monitor Disconnect reason: %v", s.Id, err) s.CleanStartupTask() s.scriptStop() if !jsonutils.QueryBoolean(s.Desc, "is_slave", false) { - s.SyncStatus() + s.SyncStatus(fmt.Sprintf("monitor disconnect %v", err)) } s.clearCgroup(0) s.Monitor = nil @@ -569,7 +568,7 @@ func (s *SKVMGuestInstance) startDiskBackupMirror(ctx context.Context) { status = compute.VM_BLOCK_STREAM_FAIL s.SyncMirrorJobFailed("mirror job missing") } - hostutils.UpdateServerStatus(context.Background(), s.GetId(), status) + hostutils.UpdateServerStatus(context.Background(), s.GetId(), status, "") } else { metadata, _ := s.Desc.Get("metadata") if metadata == nil || !metadata.Contains("backup_nbd_server_uri") { @@ -748,7 +747,7 @@ func (s *SKVMGuestInstance) DoResumeTask(ctx context.Context) { s.startupTask.Start() } -func (s *SKVMGuestInstance) SyncStatus() { +func (s *SKVMGuestInstance) SyncStatus(reason string) { if s.IsRunning() { s.Monitor.GetBlockJobCounts(s.CheckBlockOrRunning) return @@ -758,7 +757,7 @@ func (s *SKVMGuestInstance) SyncStatus() { status = "suspend" } - hostutils.UpdateServerStatus(context.Background(), s.Id, status) + hostutils.UpdateServerStatus(context.Background(), s.Id, status, reason) } func (s *SKVMGuestInstance) CheckBlockOrRunning(jobs int) { @@ -776,7 +775,7 @@ func (s *SKVMGuestInstance) CheckBlockOrRunning(jobs int) { status = compute.VM_BLOCK_STREAM } } - _, err := hostutils.UpdateServerStatus(context.Background(), s.Id, status) + _, err := hostutils.UpdateServerStatus(context.Background(), s.Id, status, "") if err != nil { log.Errorln(err) } diff --git a/pkg/hostman/hostutils/hostutils.go b/pkg/hostman/hostutils/hostutils.go index 2c7ea506ab..32fcef7513 100644 --- a/pkg/hostman/hostutils/hostutils.go +++ b/pkg/hostman/hostutils/hostutils.go @@ -136,9 +136,12 @@ func RemoteStoragecacheCacheImage(ctx context.Context, storagecacheId, imageId, storagecacheId, imageId, query, params) } -func UpdateServerStatus(ctx context.Context, sid, status string) (jsonutils.JSONObject, error) { +func UpdateServerStatus(ctx context.Context, sid, status, reason string) (jsonutils.JSONObject, error) { var stats = jsonutils.NewDict() stats.Set("status", jsonutils.NewString(status)) + if len(reason) > 0 { + stats.Set("reason", jsonutils.NewString(reason)) + } return modules.Servers.PerformAction(GetComputeSession(ctx), sid, "status", stats) }