Skip to content

Commit deefc67

Browse files
author
xml
committed
fix: Prevent local rate-limiting config from overriding remote config.
Bug: https://pms.uniontech.com/bug-view-355949.html
1 parent aa4751c commit deefc67

4 files changed

Lines changed: 59 additions & 42 deletions

File tree

src/lastore-daemon/dbusutil.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/lastore-daemon/manager_download.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,9 @@ const (
3131
func (m *Manager) setEffectiveOnlineRateLimit(nowTime string) {
3232
downloadSpeed := m.updater.downloadSpeedLimitConfigObj
3333
m.applyOnlineRateLimit(&downloadSpeed, nowTime)
34-
downloadSpeedStr, err := json.Marshal(downloadSpeed)
35-
if err == nil {
36-
logger.Infof("setEffectiveOnlineRateLimit %v --> %v", m.config.DownloadSpeedLimitConfig, string(downloadSpeedStr))
37-
m.updater.SetDownloadSpeedLimit(string(downloadSpeedStr))
34+
logger.Infof("set download limit %v --> %v by platform", m.updater.DownloadSpeedLimitConfig, downloadSpeed)
35+
if err := m.updater.setDownloadSpeedLimit(downloadSpeed); err != nil {
36+
logger.Warning(err)
3837
}
3938
}
4039

src/lastore-daemon/manager_update.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -470,12 +470,10 @@ func (m *Manager) refreshThrottlingFromPlatform() error {
470470

471471
m.applyOnlineRateLimit(&downloadSpeed, m.updatePlatform.OnlineRateLimit.ServerTime)
472472

473-
downloadSpeedStr, err := json.Marshal(downloadSpeed)
474-
if err != nil {
475-
return fmt.Errorf("failed to marshal download speed limit")
473+
logger.Infof("set download limit %v --> %v by platform", m.updater.DownloadSpeedLimitConfig, downloadSpeed)
474+
if err := m.updater.setDownloadSpeedLimit(downloadSpeed); err != nil {
475+
logger.Warningf("Failed to set download speed limit %v", err)
476476
}
477-
logger.Infof("set download limit %v --> %v by platform", m.config.DownloadSpeedLimitConfig, string(downloadSpeedStr))
478-
m.updater.SetDownloadSpeedLimit(string(downloadSpeedStr))
479477

480478
return nil
481479
}

src/lastore-daemon/updater_ifc.go

Lines changed: 52 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ package main
77
import (
88
"encoding/json"
99
"strconv"
10-
"strings"
1110
"time"
1211

1312
"github.com/godbus/dbus/v5"
@@ -133,43 +132,63 @@ func (u *Updater) SetIdleDownloadConfig(idleConfig string) *dbus.Error {
133132
}
134133

135134
func (u *Updater) SetDownloadSpeedLimit(limitConfig string) *dbus.Error {
136-
if err := json.Unmarshal([]byte(limitConfig), &u.downloadSpeedLimitConfigObj); err != nil {
135+
var limitConfigObj downloadSpeedLimitConfig
136+
if err := json.Unmarshal([]byte(limitConfig), &limitConfigObj); err != nil {
137137
logger.Warning(err)
138138
return dbusutil.ToError(err)
139139
}
140-
if u.setDownloadSpeedLimitTimer == nil {
141-
u.setDownloadSpeedLimitTimer = time.AfterFunc(time.Second, func() {
142-
config, err := json.Marshal(u.downloadSpeedLimitConfigObj)
143-
if err != nil {
144-
logger.Warning(err)
145-
return
146-
}
147-
changed := u.setPropDownloadSpeedLimitConfig(string(config))
148-
if changed {
149-
logger.Infof("set changed speed limit: %v", limitConfig)
150-
// When IsOnlineSpeedLimit is false, it means manual speed limit is set.
151-
// Save to both configs to ensure the value persists after daemon restart.
152-
if strings.Contains(limitConfig, "IsOnlineSpeedLimit") && !u.downloadSpeedLimitConfigObj.IsOnlineSpeedLimit {
153-
err := u.config.SetLocalDownloadSpeedLimitConfig(string(config))
154-
if err != nil {
155-
logger.Warning(err)
156-
return
157-
}
158-
} else {
159-
err := u.config.SetDownloadSpeedLimitConfig(string(config))
160-
if err != nil {
161-
logger.Warning(err)
162-
return
163-
}
164-
}
165-
u.manager.ChangePrepareDistUpgradeJobOption()
166-
}
167-
logger.Info("update limit config")
168-
})
169-
} else {
170-
u.setDownloadSpeedLimitTimer.Reset(time.Second)
140+
if u.downloadSpeedLimitConfigObj.IsOnlineSpeedLimit {
141+
// 在线限速优先级更高,如果通过dbus设置了一个本地限速,则不应该把在线限速的配置覆盖掉
142+
return nil
143+
}
144+
// dbus设置数据本地限速,强制将IsOnlineSpeedLimit设置为false
145+
limitConfigObj.IsOnlineSpeedLimit = false
146+
if err := u.setDownloadSpeedLimit(limitConfigObj); err != nil {
147+
logger.Warning(err)
148+
return dbusutil.ToError(err)
149+
}
150+
return nil
151+
}
152+
153+
func (u *Updater) setDownloadSpeedLimit(limitConfigObj downloadSpeedLimitConfig) error {
154+
u.PropsMu.Lock()
155+
if u.setDownloadSpeedLimitTimer != nil {
156+
u.setDownloadSpeedLimitTimer.Stop()
171157
logger.Info("reset limit timer")
172158
}
159+
u.setDownloadSpeedLimitTimer = time.AfterFunc(time.Second, func() {
160+
u.PropsMu.Lock()
161+
logger.Infof("set download limit %v --> %v", u.downloadSpeedLimitConfigObj, limitConfigObj)
162+
u.downloadSpeedLimitConfigObj = limitConfigObj
163+
config, err := json.Marshal(limitConfigObj)
164+
if err != nil {
165+
logger.Warning(err)
166+
u.PropsMu.Unlock()
167+
return
168+
}
169+
changed := u.setPropDownloadSpeedLimitConfig(string(config))
170+
if changed {
171+
if !u.downloadSpeedLimitConfigObj.IsOnlineSpeedLimit {
172+
err := u.config.SetLocalDownloadSpeedLimitConfig(string(config))
173+
if err != nil {
174+
logger.Warning(err)
175+
u.PropsMu.Unlock()
176+
return
177+
}
178+
} else {
179+
err := u.config.SetDownloadSpeedLimitConfig(string(config))
180+
if err != nil {
181+
logger.Warning(err)
182+
u.PropsMu.Unlock()
183+
return
184+
}
185+
}
186+
u.manager.ChangePrepareDistUpgradeJobOption()
187+
}
188+
u.PropsMu.Unlock()
189+
logger.Info("update limit config")
190+
})
191+
u.PropsMu.Unlock()
173192
return nil
174193
}
175194

0 commit comments

Comments
 (0)