fix(hostman): show server status changed reason

This commit is contained in:
Qu Xuan
2021-06-22 17:55:04 +08:00
parent c4cd0cabdc
commit 3c844caa4b
3 changed files with 27 additions and 25 deletions
+6 -6
View File
@@ -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
+17 -18
View File
@@ -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)
}
+4 -1
View File
@@ -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)
}