@@ -59,6 +59,7 @@ func NewStatusManager(config *config.Config, callback func(newStatus string)) *U
5959}
6060
6161func (m * UpdateModeStatusManager ) InitModifyData () {
62+ firstBoot := isFirstBoot ()
6263 m .updateMode , m .checkMode = filterMode (m .updateMode , m .checkMode )
6364 err := m .lsConfig .SetUpdateMode (m .updateMode )
6465 if err != nil {
@@ -97,20 +98,10 @@ func (m *UpdateModeStatusManager) InitModifyData() {
9798 m .currentTriggerBackingUpType = obj .TriggerBackingUpType
9899 m .abStatus = obj .ABStatus
99100 m .abError = obj .ABError
100- if isFirstBoot () {
101- for key , value := range m .updateModeStatusObj {
102- switch value {
103- case system .IsDownloading , system .DownloadPause , system .DownloadErr :
104- m .updateModeStatusObj [key ] = system .NotDownload
105- case system .UpgradeErr , system .Upgrading , system .WaitRunUpgrade , system .CanUpgrade :
106- m .updateModeStatusObj [key ] = system .NotDownload
107- case system .Upgraded :
108- m .updateModeStatusObj [key ] = system .NoUpdate
109- }
110- }
111- m .currentTriggerBackingUpType = system .AllInstallUpdate
112- m .abStatus = system .NotBackup
113- m .abError = system .NoABError
101+ if m .recoverStatusAfterDaemonRestart (firstBoot ) {
102+ logger .Info ("reset transient update status after daemon restart" )
103+ }
104+ if firstBoot {
114105 err := m .lsConfig .UpdateLastoreDaemonStatus (config .CanUpgrade , false )
115106 if err != nil {
116107 logger .Warning (err )
@@ -122,6 +113,64 @@ func (m *UpdateModeStatusManager) InitModifyData() {
122113 m .updateModeDownloadSizeMap = make (map [string ]float64 )
123114}
124115
116+ func (m * UpdateModeStatusManager ) recoverStatusAfterDaemonRestart (firstBoot bool ) bool {
117+ changed := false
118+ for key , value := range m .updateModeStatusObj {
119+ newStatus := recoverUpdateModeStatus (value , firstBoot )
120+ if newStatus != value {
121+ m .updateModeStatusObj [key ] = newStatus
122+ changed = true
123+ }
124+ }
125+
126+ if firstBoot {
127+ if m .currentTriggerBackingUpType != system .AllInstallUpdate {
128+ m .currentTriggerBackingUpType = system .AllInstallUpdate
129+ changed = true
130+ }
131+ if m .abStatus != system .NotBackup {
132+ m .abStatus = system .NotBackup
133+ changed = true
134+ }
135+ if m .abError != system .NoABError {
136+ m .abError = system .NoABError
137+ changed = true
138+ }
139+ return changed
140+ }
141+
142+ // service重启后进行中的备份流程无法继续,需要回到初始备份状态
143+ if m .abStatus == system .BackingUp || m .abStatus == system .HasBackedUp {
144+ m .currentTriggerBackingUpType = system .AllInstallUpdate
145+ m .abStatus = system .NotBackup
146+ m .abError = system .NoABError
147+ changed = true
148+ }
149+ return changed
150+ }
151+
152+ func recoverUpdateModeStatus (status system.UpdateModeStatus , firstBoot bool ) system.UpdateModeStatus {
153+ if firstBoot {
154+ switch status {
155+ case system .IsDownloading , system .DownloadPause , system .DownloadErr :
156+ return system .NotDownload
157+ case system .UpgradeErr , system .Upgrading , system .WaitRunUpgrade , system .CanUpgrade :
158+ return system .NotDownload
159+ case system .Upgraded :
160+ return system .NoUpdate
161+ default :
162+ return status
163+ }
164+ }
165+
166+ switch status {
167+ case system .IsDownloading , system .DownloadPause , system .WaitRunUpgrade , system .Upgrading :
168+ return system .NotDownload
169+ default :
170+ return status
171+ }
172+ }
173+
125174// filterMode 去除 updateMode 和 checkMode 不满足条件的数据
126175func filterMode (updateMode , checkMode system.UpdateType ) (system.UpdateType , system.UpdateType ) {
127176 var res0 system.UpdateType // updateMode
0 commit comments