From 662ea2695c135a54ec5e4a040c0e2cb831419733 Mon Sep 17 00:00:00 2001 From: electricface Date: Thu, 2 Apr 2026 15:46:06 +0800 Subject: [PATCH] fix: prepare_dist_upgrade type job cannot enter end state - Added notifyDone function to ensure that sending done signal does not block repeatedly - Increased state transition logs Bug: https://pms.uniontech.com/bug-view-355101.html Bug: https://pms.uniontech.com/bug-view-355481.html Bug: https://pms.uniontech.com/bug-view-355485.html Change-Id: Ia4182283a8ee38f6fd9809f2970770f93038dba3 --- src/lastore-daemon/manager_download.go | 19 +++++++++++-------- src/lastore-daemon/start_job.go | 5 ++++- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/lastore-daemon/manager_download.go b/src/lastore-daemon/manager_download.go index a5f4b29e6..c197e0265 100644 --- a/src/lastore-daemon/manager_download.go +++ b/src/lastore-daemon/manager_download.go @@ -166,7 +166,13 @@ func (m *Manager) prepareDistUpgrade(sender dbus.Sender, origin system.UpdateTyp m.statusManager.SetUpdateStatus(mode, system.DownloadErr) return nil, dbusutil.ToError(errors.New(string(errStr))) } - done := make(chan bool) + done := make(chan struct{}, 1) + notifyDone := func() { + select { + case done <- struct{}{}: + default: + } + } if m.config.IntranetUpdate { //私有化更新有忙闲时下载限速的功能,需要在真正开始下载前刷新一下线上限速配置 if err = m.refreshThrottlingFromPlatform(); err != nil { @@ -297,7 +303,7 @@ func (m *Manager) prepareDistUpgrade(sender dbus.Sender, origin system.UpdateTyp }, string(system.FailedStatus): func() error { if m.config.IntranetUpdate { - done <- true + notifyDone() cacheFile := "/tmp/checkpolicy.cache" _ = os.RemoveAll(cacheFile) } @@ -381,9 +387,6 @@ func (m *Manager) prepareDistUpgrade(sender dbus.Sender, origin system.UpdateTyp return nil }, string(system.SucceedStatus): func() error { - if m.config.IntranetUpdate { - done <- true - } msg := fmt.Sprintf("download %v package success", j.updateTyp.JobType()) m.updatePlatform.PostProcessEventMessage(updateplatform.ProcessEvent{ TaskID: 1, @@ -469,11 +472,11 @@ func (m *Manager) prepareDistUpgrade(sender dbus.Sender, origin system.UpdateTyp return nil }, string(system.EndStatus): func() error { - if m.config.IntranetUpdate { - done <- true - } if j.next == nil { logger.Info("running in last end hook") + if m.config.IntranetUpdate { + notifyDone() + } // 如果出现单项失败,其他的状态需要修改,IsDownloading->notDownload // 如果已经有单项下载完成,然后取消下载,DownloadPause->notDownload m.statusManager.SetUpdateStatus(mode, system.NotDownload) diff --git a/src/lastore-daemon/start_job.go b/src/lastore-daemon/start_job.go index 817ac03d6..b87dd72a7 100644 --- a/src/lastore-daemon/start_job.go +++ b/src/lastore-daemon/start_job.go @@ -117,7 +117,7 @@ func TransitionJobState(j *Job, to system.Status) error { if j.next != nil && ((j.Status == system.SucceedStatus && to == system.EndStatus) || (j.Status == system.RunningStatus && to == system.SucceedStatus)) { inhibitSignalEmit = true } - logger.Infof("%q transition state from %q to %q (Cancelable:%v)\n", j.Id, j.Status, to, j.Cancelable) + logger.Infof("trying to transition job %q from %q to %q (Cancelable:%v)\n", j.Id, j.Status, to, j.Cancelable) if to == system.FailedStatus && j.retry > 0 { j.Status = to return nil @@ -129,10 +129,12 @@ func TransitionJobState(j *Job, to system.Status) error { j.PropsMu.Lock() // 在切换running和success状态时触发一些检查,如果出错,需要终止并返回error if (to == system.RunningStatus || to == system.SucceedStatus) && err != nil { + logger.Warningf("pre hook failed for job %q (state: %s): %v", j.Id, to, err) return err } } j.Status = to + logger.Infof("job %q successfully transitioned to %q", j.Id, to) if NotUseDBus { return nil } @@ -149,6 +151,7 @@ func TransitionJobState(j *Job, to system.Status) error { j.PropsMu.Lock() // 在切换running和success状态时触发一些检查,如果出错,需要终止并返回error,不过通常不会有success的after hook返回error if (to == system.RunningStatus || to == system.SucceedStatus) && err != nil { + logger.Warningf("after hook failed for job %q (state: %s): %v", j.Id, to, err) return err } }