Skip to content

Commit 0761a4b

Browse files
authored
fix: recover transient update and backup states after daemon restart (#321)
Bug: https://pms.uniontech.com/bug-view-345689.html
1 parent 1ba86bc commit 0761a4b

1 file changed

Lines changed: 63 additions & 14 deletions

File tree

src/lastore-daemon/update_status.go

Lines changed: 63 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ func NewStatusManager(config *config.Config, callback func(newStatus string)) *U
5959
}
6060

6161
func (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 不满足条件的数据
126175
func filterMode(updateMode, checkMode system.UpdateType) (system.UpdateType, system.UpdateType) {
127176
var res0 system.UpdateType // updateMode

0 commit comments

Comments
 (0)