diff --git a/src/internal/ratelimit/ratelimit.go b/src/internal/ratelimit/ratelimit.go index 5ee3761ad..b3172003f 100644 --- a/src/internal/ratelimit/ratelimit.go +++ b/src/internal/ratelimit/ratelimit.go @@ -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"` // 全天限制 @@ -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 // 本地设置限速 @@ -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) @@ -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 != "" { diff --git a/src/internal/updateplatform/message_report.go b/src/internal/updateplatform/message_report.go index 05c10397f..e3c8afc69 100644 --- a/src/internal/updateplatform/message_report.go +++ b/src/internal/updateplatform/message_report.go @@ -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) @@ -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), } } @@ -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) @@ -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) @@ -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 { @@ -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) @@ -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) @@ -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 { @@ -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) @@ -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) @@ -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 { @@ -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) @@ -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) @@ -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 diff --git a/usr/share/dsg/configs/org.deepin.dde.lastore/org.deepin.dde.lastore.json b/usr/share/dsg/configs/org.deepin.dde.lastore/org.deepin.dde.lastore.json index e95ed74f3..3589080a1 100644 --- a/usr/share/dsg/configs/org.deepin.dde.lastore/org.deepin.dde.lastore.json +++ b/usr/share/dsg/configs/org.deepin.dde.lastore/org.deepin.dde.lastore.json @@ -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}", "serial": 0, "flags": [ "global" @@ -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" @@ -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" @@ -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" @@ -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" @@ -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" @@ -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" @@ -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" @@ -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" @@ -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" @@ -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" @@ -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"