Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions docs/http本地和远程限速配置切换原则.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
- dbus接口作为本地配置设置接口,如果当前正在使用远程限速配置,则dbus直接返回,防止本地配置覆盖远程配置的情况出现。
- 如果远程配置关闭了,则启用本地配置,否则使用远程配置。
- 配置切换后需要发送配置属性变化信号,控制中心会根据这个进行实时改变限速状态
1 change: 1 addition & 0 deletions src/lastore-daemon/dbusutil.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 3 additions & 4 deletions src/lastore-daemon/manager_download.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,9 @@ const (
func (m *Manager) setEffectiveOnlineRateLimit(nowTime string) {
downloadSpeed := m.updater.downloadSpeedLimitConfigObj
m.applyOnlineRateLimit(&downloadSpeed, nowTime)
downloadSpeedStr, err := json.Marshal(downloadSpeed)
if err == nil {
logger.Infof("setEffectiveOnlineRateLimit %v --> %v", m.config.DownloadSpeedLimitConfig, string(downloadSpeedStr))
m.updater.SetDownloadSpeedLimit(string(downloadSpeedStr))
logger.Infof("set download limit %v --> %v by platform", m.updater.DownloadSpeedLimitConfig, downloadSpeed)
if err := m.updater.setDownloadSpeedLimit(downloadSpeed); err != nil {
logger.Warning(err)
}
}

Expand Down
8 changes: 3 additions & 5 deletions src/lastore-daemon/manager_update.go
Original file line number Diff line number Diff line change
Expand Up @@ -470,12 +470,10 @@ func (m *Manager) refreshThrottlingFromPlatform() error {

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

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

return nil
}
Expand Down
83 changes: 51 additions & 32 deletions src/lastore-daemon/updater_ifc.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ package main
import (
"encoding/json"
"strconv"
"strings"
"time"

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

func (u *Updater) SetDownloadSpeedLimit(limitConfig string) *dbus.Error {
if err := json.Unmarshal([]byte(limitConfig), &u.downloadSpeedLimitConfigObj); err != nil {
var limitConfigObj downloadSpeedLimitConfig
if err := json.Unmarshal([]byte(limitConfig), &limitConfigObj); err != nil {
logger.Warning(err)
return dbusutil.ToError(err)
}
if u.setDownloadSpeedLimitTimer == nil {
u.setDownloadSpeedLimitTimer = time.AfterFunc(time.Second, func() {
config, err := json.Marshal(u.downloadSpeedLimitConfigObj)
if err != nil {
if u.downloadSpeedLimitConfigObj.IsOnlineSpeedLimit {
// 在线限速优先级更高,如果通过dbus设置了一个本地限速,则不应该把在线限速的配置覆盖掉
return nil
}
// dbus设置数据本地限速,强制将IsOnlineSpeedLimit设置为false
limitConfigObj.IsOnlineSpeedLimit = false
if err := u.setDownloadSpeedLimit(limitConfigObj); err != nil {
logger.Warning(err)
return dbusutil.ToError(err)
}
return nil
}

func (u *Updater) setDownloadSpeedLimit(limitConfigObj downloadSpeedLimitConfig) error {
u.PropsMu.Lock()

logger.Infof("set download limit %v --> %v", u.downloadSpeedLimitConfigObj, limitConfigObj)
u.downloadSpeedLimitConfigObj = limitConfigObj
config, err := json.Marshal(limitConfigObj)
if err != nil {
logger.Warning(err)
u.PropsMu.Unlock()
return err
}
changed := u.setPropDownloadSpeedLimitConfig(string(config))
if !changed {
u.PropsMu.Unlock()
return nil
}

if u.setDownloadSpeedLimitTimer != nil {
u.setDownloadSpeedLimitTimer.Stop()
logger.Info("reset limit timer")
}
configStr := string(config)
u.setDownloadSpeedLimitTimer = time.AfterFunc(time.Second, func() {
u.PropsMu.Lock()
if !u.downloadSpeedLimitConfigObj.IsOnlineSpeedLimit {
if err := u.config.SetLocalDownloadSpeedLimitConfig(configStr); err != nil {
logger.Warning(err)
return
}
changed := u.setPropDownloadSpeedLimitConfig(string(config))
if changed {
logger.Infof("set changed speed limit: %v", limitConfig)
// When IsOnlineSpeedLimit is false, it means manual speed limit is set.
// Save to both configs to ensure the value persists after daemon restart.
if strings.Contains(limitConfig, "IsOnlineSpeedLimit") && !u.downloadSpeedLimitConfigObj.IsOnlineSpeedLimit {
err := u.config.SetLocalDownloadSpeedLimitConfig(string(config))
if err != nil {
logger.Warning(err)
return
}
} else {
err := u.config.SetDownloadSpeedLimitConfig(string(config))
if err != nil {
logger.Warning(err)
return
}
}
u.manager.ChangePrepareDistUpgradeJobOption()
} else {
if err := u.config.SetDownloadSpeedLimitConfig(configStr); err != nil {
logger.Warning(err)
}
logger.Info("update limit config")
})
} else {
u.setDownloadSpeedLimitTimer.Reset(time.Second)
logger.Info("reset limit timer")
}
}
u.manager.ChangePrepareDistUpgradeJobOption()
u.PropsMu.Unlock()
logger.Info("update limit config")
})

u.PropsMu.Unlock()
return nil
}

Expand Down
Loading