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
44 changes: 39 additions & 5 deletions src/internal/ratelimit/ratelimit.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ const UPGRADE_DELIVERY_SERVICE = "org.deepin.upgradedelivery"
const UPGRADE_DELIVERY_OBJECT_PATH = "/org/deepin/upgradedelivery"
const UPGRADE_DELIVERY_INTERFACE = "org.deepin.upgradedelivery"

const DefaultRateLimit = 10 * 1024 // 10 kb/s

// SyncLimit 服务器端限速配置信息
type SyncLimit struct {
AllDayRateLimit *RateLimitWithTime `json:"a,omitempty"` // 全天限制
Expand All @@ -37,9 +39,6 @@ type IPFSConfig struct {
UploadLimit *SyncLimit `json:"ul"` // 上传限速
}

const MaxRate = 999999 * 1024 // 最大速率(999999 KB/s)
const MinRate = 10 * 1024 // 最小速率(10 KB/s)

const (
RateLimitTypeNo = 0 // 表示不设置
RateLimitTypeLocal = 1 // 本地设置限速
Expand Down Expand Up @@ -70,6 +69,41 @@ type IPFSLimitRate struct {
}

func SetIPFSRateLimit(uploadLimitRate, downloadLimitRate IPFSLimitRate) error {
// delivery dbus输入参数要求:
// 1. GlobalLimitLocal必须有数据,且不能为空,如果不限速需要设置限速类型为0,限速值使用默认值
// 2. 其他的限速,如果不限速,需要设置成nil
if uploadLimitRate.GlobalLimitRemote != nil && uploadLimitRate.GlobalLimitRemote.LimitType == 0 {
uploadLimitRate.GlobalLimitRemote = nil
}
if uploadLimitRate.BusyLimitRemote != nil && uploadLimitRate.BusyLimitRemote.LimitType == 0 {
uploadLimitRate.BusyLimitRemote = nil
}
if uploadLimitRate.FreeLimitRemote != nil && uploadLimitRate.FreeLimitRemote.LimitType == 0 {
uploadLimitRate.FreeLimitRemote = nil
}
if uploadLimitRate.BusyLimitLocal != nil && uploadLimitRate.BusyLimitLocal.LimitType == 0 {
uploadLimitRate.BusyLimitLocal = nil
}
if uploadLimitRate.FreeLimitLocal != nil && uploadLimitRate.FreeLimitLocal.LimitType == 0 {
uploadLimitRate.FreeLimitLocal = nil
}

if downloadLimitRate.GlobalLimitRemote != nil && downloadLimitRate.GlobalLimitRemote.LimitType == 0 {
downloadLimitRate.GlobalLimitRemote = nil
}
if downloadLimitRate.BusyLimitRemote != nil && downloadLimitRate.BusyLimitRemote.LimitType == 0 {
downloadLimitRate.BusyLimitRemote = nil
}
if downloadLimitRate.FreeLimitRemote != nil && downloadLimitRate.FreeLimitRemote.LimitType == 0 {
downloadLimitRate.FreeLimitRemote = nil
}
if downloadLimitRate.BusyLimitLocal != nil && downloadLimitRate.BusyLimitLocal.LimitType == 0 {
downloadLimitRate.BusyLimitLocal = nil
}
if downloadLimitRate.FreeLimitLocal != nil && downloadLimitRate.FreeLimitLocal.LimitType == 0 {
downloadLimitRate.FreeLimitLocal = nil
}

ipfsUploadConfigData, err := json.Marshal(uploadLimitRate)
if err != nil {
return fmt.Errorf("failed to marshal upload limit rate: %w", err)
Expand Down Expand Up @@ -181,8 +215,8 @@ func convertRateLimitWithTimeToRateInfo(rlwt *RateLimitWithTime) *RateInfo {
rateInfo.CurrentRate = int64(rlwt.RateLimit) * 1024 // kb ---> byte
} else {
rateInfo.LimitType = RateLimitTypeNo
rateInfo.LimitRate = MaxRate
rateInfo.CurrentRate = MaxRate
rateInfo.LimitRate = DefaultRateLimit
rateInfo.CurrentRate = DefaultRateLimit
}

if rlwt.StartTime != "" {
Expand Down
89 changes: 85 additions & 4 deletions src/internal/updateplatform/message_report.go
Original file line number Diff line number Diff line change
Expand Up @@ -2033,6 +2033,39 @@ func (m *UpdatePlatformManager) UpdateRequestUrl(url string) {
m.requestUrl = url
}

func updateNoLimitConfigIfChanged(currentValue string, setFunc func(string) error) error {
var existingRate ratelimit.RateInfo
if currentValue != "" {
if err := json.Unmarshal([]byte(currentValue), &existingRate); err == nil {
if existingRate.LimitType == ratelimit.RateLimitTypeNo {
return nil
}
newRate := ratelimit.RateInfo{
LimitType: ratelimit.RateLimitTypeNo,
LimitRate: existingRate.LimitRate,
CurrentRate: existingRate.CurrentRate,
StartTime: existingRate.StartTime,
EndTime: existingRate.EndTime,
}
data, err := json.Marshal(&newRate)
if err != nil {
return err
}
return setFunc(string(data))
}
}
newRate := ratelimit.RateInfo{
LimitType: ratelimit.RateLimitTypeNo,
LimitRate: ratelimit.DefaultRateLimit,
CurrentRate: ratelimit.DefaultRateLimit,
}
data, err := json.Marshal(&newRate)
if err != nil {
return err
}
return setFunc(string(data))
}

func (m *UpdatePlatformManager) UpdateDeliverySpeedLimit() error {
if err := m.GenIpfsConfig(); err != nil {
return fmt.Errorf("failed to gen ipfs config: %w", err)
Expand All @@ -2056,15 +2089,15 @@ func (m *UpdatePlatformManager) UpdateDeliverySpeedLimit() error {
if localDownloadRateLimit.Global == nil {
localDownloadRateLimit.Global = &ratelimit.RateInfo{ // 本地不限速
LimitType: ratelimit.RateLimitTypeNo,
LimitRate: int64(ratelimit.MaxRate),
CurrentRate: int64(ratelimit.MaxRate),
LimitRate: int64(ratelimit.DefaultRateLimit),
CurrentRate: int64(ratelimit.DefaultRateLimit),
}
}
if localUploadRateLimit.Global == nil {
localUploadRateLimit.Global = &ratelimit.RateInfo{ // 本地不限速
LimitType: ratelimit.RateLimitTypeNo,
LimitRate: int64(ratelimit.MaxRate),
CurrentRate: int64(ratelimit.MaxRate),
LimitRate: int64(ratelimit.DefaultRateLimit),
CurrentRate: int64(ratelimit.DefaultRateLimit),
}
}

Expand Down Expand Up @@ -2101,6 +2134,10 @@ func (m *UpdatePlatformManager) UpdateDeliverySpeedLimit() error {
logger.Warning(err)
}
}
} else {
if err := updateNoLimitConfigIfChanged(m.config.DeliveryRemoteUploadGlobalLimit, m.config.SetDeliveryRemoteUploadGlobalLimit); err != nil {
logger.Warning(err)
}
}
if uploadLimitRate.BusyLimitRemote != nil {
remoteUploadPeakData, err := json.Marshal(uploadLimitRate.BusyLimitRemote)
Expand All @@ -2109,6 +2146,10 @@ func (m *UpdatePlatformManager) UpdateDeliverySpeedLimit() error {
logger.Warning(err)
}
}
} else {
if err := updateNoLimitConfigIfChanged(m.config.DeliveryRemoteUploadPeakLimit, m.config.SetDeliveryRemoteUploadPeakLimit); err != nil {
logger.Warning(err)
}
}
if uploadLimitRate.FreeLimitRemote != nil {
remoteUploadOffPeakData, err := json.Marshal(uploadLimitRate.FreeLimitRemote)
Expand All @@ -2117,6 +2158,10 @@ func (m *UpdatePlatformManager) UpdateDeliverySpeedLimit() error {
logger.Warning(err)
}
}
} else {
if err := updateNoLimitConfigIfChanged(m.config.DeliveryRemoteUploadOffPeakLimit, m.config.SetDeliveryRemoteUploadOffPeakLimit); err != nil {
logger.Warning(err)
}
}

if downloadLimitRate.GlobalLimitRemote != nil {
Expand All @@ -2126,6 +2171,10 @@ func (m *UpdatePlatformManager) UpdateDeliverySpeedLimit() error {
logger.Warning(err)
}
}
} else {
if err := updateNoLimitConfigIfChanged(m.config.DeliveryRemoteDownloadGlobalLimit, m.config.SetDeliveryRemoteDownloadGlobalLimit); err != nil {
logger.Warning(err)
}
}
if downloadLimitRate.BusyLimitRemote != nil {
remoteDownloadPeakData, err := json.Marshal(downloadLimitRate.BusyLimitRemote)
Expand All @@ -2134,6 +2183,10 @@ func (m *UpdatePlatformManager) UpdateDeliverySpeedLimit() error {
logger.Warning(err)
}
}
} else {
if err := updateNoLimitConfigIfChanged(m.config.DeliveryRemoteDownloadPeakLimit, m.config.SetDeliveryRemoteDownloadPeakLimit); err != nil {
logger.Warning(err)
}
}
if downloadLimitRate.FreeLimitRemote != nil {
remoteDownloadOffPeakData, err := json.Marshal(downloadLimitRate.FreeLimitRemote)
Expand All @@ -2142,6 +2195,10 @@ func (m *UpdatePlatformManager) UpdateDeliverySpeedLimit() error {
logger.Warning(err)
}
}
} else {
if err := updateNoLimitConfigIfChanged(m.config.DeliveryRemoteDownloadOffPeakLimit, m.config.SetDeliveryRemoteDownloadOffPeakLimit); err != nil {
logger.Warning(err)
}
}

if uploadLimitRate.GlobalLimitLocal != nil {
Expand All @@ -2151,6 +2208,10 @@ func (m *UpdatePlatformManager) UpdateDeliverySpeedLimit() error {
logger.Warning(err)
}
}
} else {
if err := updateNoLimitConfigIfChanged(m.config.DeliveryLocalUploadGlobalLimit, m.config.SetDeliveryLocalUploadGlobalLimit); err != nil {
logger.Warning(err)
}
}
if uploadLimitRate.BusyLimitLocal != nil {
localUploadPeakData, err := json.Marshal(uploadLimitRate.BusyLimitLocal)
Expand All @@ -2159,6 +2220,10 @@ func (m *UpdatePlatformManager) UpdateDeliverySpeedLimit() error {
logger.Warning(err)
}
}
} else {
if err := updateNoLimitConfigIfChanged(m.config.DeliveryLocalUploadPeakLimit, m.config.SetDeliveryLocalUploadPeakLimit); err != nil {
logger.Warning(err)
}
}
if uploadLimitRate.FreeLimitLocal != nil {
localUploadOffPeakData, err := json.Marshal(uploadLimitRate.FreeLimitLocal)
Expand All @@ -2167,6 +2232,10 @@ func (m *UpdatePlatformManager) UpdateDeliverySpeedLimit() error {
logger.Warning(err)
}
}
} else {
if err := updateNoLimitConfigIfChanged(m.config.DeliveryLocalUploadOffPeakLimit, m.config.SetDeliveryLocalUploadOffPeakLimit); err != nil {
logger.Warning(err)
}
}

if downloadLimitRate.GlobalLimitLocal != nil {
Expand All @@ -2176,6 +2245,10 @@ func (m *UpdatePlatformManager) UpdateDeliverySpeedLimit() error {
logger.Warning(err)
}
}
} else {
if err := updateNoLimitConfigIfChanged(m.config.DeliveryLocalDownloadGlobalLimit, m.config.SetDeliveryLocalDownloadGlobalLimit); err != nil {
logger.Warning(err)
}
}
if downloadLimitRate.BusyLimitLocal != nil {
localDownloadPeakData, err := json.Marshal(downloadLimitRate.BusyLimitLocal)
Expand All @@ -2184,6 +2257,10 @@ func (m *UpdatePlatformManager) UpdateDeliverySpeedLimit() error {
logger.Warning(err)
}
}
} else {
if err := updateNoLimitConfigIfChanged(m.config.DeliveryLocalDownloadPeakLimit, m.config.SetDeliveryLocalDownloadPeakLimit); err != nil {
logger.Warning(err)
}
}
if downloadLimitRate.FreeLimitLocal != nil {
localDownloadOffPeakData, err := json.Marshal(downloadLimitRate.FreeLimitLocal)
Expand All @@ -2192,6 +2269,10 @@ func (m *UpdatePlatformManager) UpdateDeliverySpeedLimit() error {
logger.Warning(err)
}
}
} else {
if err := updateNoLimitConfigIfChanged(m.config.DeliveryLocalDownloadOffPeakLimit, m.config.SetDeliveryLocalDownloadOffPeakLimit); err != nil {
logger.Warning(err)
}
}

return nil
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -636,7 +636,7 @@
"visibility": "private"
},
"delivery-remote-download-global-limit": {
"value": "",
"value": "{\"LimitType\":0,\"StartTime\":\"0001-01-01T00:00:00Z\",\"EndTime\":\"0001-01-01T00:00:00Z\",\"LimitRate\":10240,\"CurrentRate\":10240}",
Comment thread
zhaohuiw42 marked this conversation as resolved.
"serial": 0,
"flags": [
"global"
Expand All @@ -649,7 +649,7 @@
"visibility": "private"
},
"delivery-remote-upload-global-limit": {
"value": "",
"value": "{\"LimitType\":0,\"StartTime\":\"0001-01-01T00:00:00Z\",\"EndTime\":\"0001-01-01T00:00:00Z\",\"LimitRate\":10240,\"CurrentRate\":10240}",
"serial": 0,
"flags": [
"global"
Expand All @@ -662,7 +662,7 @@
"visibility": "private"
},
"delivery-remote-download-peak-limit": {
"value": "",
"value": "{\"LimitType\":0,\"StartTime\":\"0001-01-01T00:00:00Z\",\"EndTime\":\"0001-01-01T00:00:00Z\",\"LimitRate\":10240,\"CurrentRate\":10240}",
"serial": 0,
"flags": [
"global"
Expand All @@ -675,7 +675,7 @@
"visibility": "private"
},
"delivery-remote-upload-peak-limit": {
"value": "",
"value": "{\"LimitType\":0,\"StartTime\":\"0001-01-01T00:00:00Z\",\"EndTime\":\"0001-01-01T00:00:00Z\",\"LimitRate\":10240,\"CurrentRate\":10240}",
"serial": 0,
"flags": [
"global"
Expand All @@ -688,7 +688,7 @@
"visibility": "private"
},
"delivery-remote-download-offpeak-limit": {
"value": "",
"value": "{\"LimitType\":0,\"StartTime\":\"0001-01-01T00:00:00Z\",\"EndTime\":\"0001-01-01T00:00:00Z\",\"LimitRate\":10240,\"CurrentRate\":10240}",
"serial": 0,
"flags": [
"global"
Expand All @@ -701,7 +701,7 @@
"visibility": "private"
},
"delivery-remote-upload-offpeak-limit": {
"value": "",
"value": "{\"LimitType\":0,\"StartTime\":\"0001-01-01T00:00:00Z\",\"EndTime\":\"0001-01-01T00:00:00Z\",\"LimitRate\":10240,\"CurrentRate\":10240}",
"serial": 0,
"flags": [
"global"
Expand All @@ -714,7 +714,7 @@
"visibility": "private"
},
"delivery-local-download-global-limit": {
"value": "",
"value": "{\"LimitType\":0,\"StartTime\":\"0001-01-01T00:00:00Z\",\"EndTime\":\"0001-01-01T00:00:00Z\",\"LimitRate\":10240,\"CurrentRate\":10240}",
"serial": 0,
"flags": [
"global"
Expand All @@ -727,7 +727,7 @@
"visibility": "private"
},
"delivery-local-upload-global-limit": {
"value": "",
"value": "{\"LimitType\":0,\"StartTime\":\"0001-01-01T00:00:00Z\",\"EndTime\":\"0001-01-01T00:00:00Z\",\"LimitRate\":10240,\"CurrentRate\":10240}",
"serial": 0,
"flags": [
"global"
Expand All @@ -740,7 +740,7 @@
"visibility": "private"
},
"delivery-local-download-peak-limit": {
"value": "",
"value": "{\"LimitType\":0,\"StartTime\":\"0001-01-01T00:00:00Z\",\"EndTime\":\"0001-01-01T00:00:00Z\",\"LimitRate\":10240,\"CurrentRate\":10240}",
"serial": 0,
"flags": [
"global"
Expand All @@ -753,7 +753,7 @@
"visibility": "private"
},
"delivery-local-upload-peak-limit": {
"value": "",
"value": "{\"LimitType\":0,\"StartTime\":\"0001-01-01T00:00:00Z\",\"EndTime\":\"0001-01-01T00:00:00Z\",\"LimitRate\":10240,\"CurrentRate\":10240}",
"serial": 0,
"flags": [
"global"
Expand All @@ -766,7 +766,7 @@
"visibility": "private"
},
"delivery-local-download-offpeak-limit": {
"value": "",
"value": "{\"LimitType\":0,\"StartTime\":\"0001-01-01T00:00:00Z\",\"EndTime\":\"0001-01-01T00:00:00Z\",\"LimitRate\":10240,\"CurrentRate\":10240}",
"serial": 0,
"flags": [
"global"
Expand All @@ -779,7 +779,7 @@
"visibility": "private"
},
"delivery-local-upload-offpeak-limit": {
"value": "",
"value": "{\"LimitType\":0,\"StartTime\":\"0001-01-01T00:00:00Z\",\"EndTime\":\"0001-01-01T00:00:00Z\",\"LimitRate\":10240,\"CurrentRate\":10240}",
"serial": 0,
"flags": [
"global"
Expand Down
Loading