Skip to content

Commit af63b62

Browse files
xmlqiuzhiqian
authored andcommitted
fix(ratelimit): pass nil for unlimited rate via D-Bus instead of MaxRate
Bug: https://pms.uniontech.com/bug-view-355955.html
1 parent 3310253 commit af63b62

3 files changed

Lines changed: 136 additions & 21 deletions

File tree

src/internal/ratelimit/ratelimit.go

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ const UPGRADE_DELIVERY_SERVICE = "org.deepin.upgradedelivery"
1515
const UPGRADE_DELIVERY_OBJECT_PATH = "/org/deepin/upgradedelivery"
1616
const UPGRADE_DELIVERY_INTERFACE = "org.deepin.upgradedelivery"
1717

18+
const DefaultRateLimit = 10 * 1024 // 10 kb/s
19+
1820
// SyncLimit 服务器端限速配置信息
1921
type SyncLimit struct {
2022
AllDayRateLimit *RateLimitWithTime `json:"a,omitempty"` // 全天限制
@@ -37,9 +39,6 @@ type IPFSConfig struct {
3739
UploadLimit *SyncLimit `json:"ul"` // 上传限速
3840
}
3941

40-
const MaxRate = 999999 * 1024 // 最大速率(999999 KB/s)
41-
const MinRate = 10 * 1024 // 最小速率(10 KB/s)
42-
4342
const (
4443
RateLimitTypeNo = 0 // 表示不设置
4544
RateLimitTypeLocal = 1 // 本地设置限速
@@ -70,6 +69,41 @@ type IPFSLimitRate struct {
7069
}
7170

7271
func SetIPFSRateLimit(uploadLimitRate, downloadLimitRate IPFSLimitRate) error {
72+
// delivery dbus输入参数要求:
73+
// 1. GlobalLimitLocal必须有数据,且不能为空,如果不限速需要设置限速类型为0,限速值使用默认值
74+
// 2. 其他的限速,如果不限速,需要设置成nil
75+
if uploadLimitRate.GlobalLimitRemote != nil && uploadLimitRate.GlobalLimitRemote.LimitType == 0 {
76+
uploadLimitRate.GlobalLimitRemote = nil
77+
}
78+
if uploadLimitRate.BusyLimitRemote != nil && uploadLimitRate.BusyLimitRemote.LimitType == 0 {
79+
uploadLimitRate.BusyLimitRemote = nil
80+
}
81+
if uploadLimitRate.FreeLimitRemote != nil && uploadLimitRate.FreeLimitRemote.LimitType == 0 {
82+
uploadLimitRate.FreeLimitRemote = nil
83+
}
84+
if uploadLimitRate.BusyLimitLocal != nil && uploadLimitRate.BusyLimitLocal.LimitType == 0 {
85+
uploadLimitRate.BusyLimitLocal = nil
86+
}
87+
if uploadLimitRate.FreeLimitLocal != nil && uploadLimitRate.FreeLimitLocal.LimitType == 0 {
88+
uploadLimitRate.FreeLimitLocal = nil
89+
}
90+
91+
if downloadLimitRate.GlobalLimitRemote != nil && downloadLimitRate.GlobalLimitRemote.LimitType == 0 {
92+
downloadLimitRate.GlobalLimitRemote = nil
93+
}
94+
if downloadLimitRate.BusyLimitRemote != nil && downloadLimitRate.BusyLimitRemote.LimitType == 0 {
95+
downloadLimitRate.BusyLimitRemote = nil
96+
}
97+
if downloadLimitRate.FreeLimitRemote != nil && downloadLimitRate.FreeLimitRemote.LimitType == 0 {
98+
downloadLimitRate.FreeLimitRemote = nil
99+
}
100+
if downloadLimitRate.BusyLimitLocal != nil && downloadLimitRate.BusyLimitLocal.LimitType == 0 {
101+
downloadLimitRate.BusyLimitLocal = nil
102+
}
103+
if downloadLimitRate.FreeLimitLocal != nil && downloadLimitRate.FreeLimitLocal.LimitType == 0 {
104+
downloadLimitRate.FreeLimitLocal = nil
105+
}
106+
73107
ipfsUploadConfigData, err := json.Marshal(uploadLimitRate)
74108
if err != nil {
75109
return fmt.Errorf("failed to marshal upload limit rate: %w", err)
@@ -181,8 +215,8 @@ func convertRateLimitWithTimeToRateInfo(rlwt *RateLimitWithTime) *RateInfo {
181215
rateInfo.CurrentRate = int64(rlwt.RateLimit) * 1024 // kb ---> byte
182216
} else {
183217
rateInfo.LimitType = RateLimitTypeNo
184-
rateInfo.LimitRate = MaxRate
185-
rateInfo.CurrentRate = MaxRate
218+
rateInfo.LimitRate = DefaultRateLimit
219+
rateInfo.CurrentRate = DefaultRateLimit
186220
}
187221

188222
if rlwt.StartTime != "" {

src/internal/updateplatform/message_report.go

Lines changed: 85 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2033,6 +2033,39 @@ func (m *UpdatePlatformManager) UpdateRequestUrl(url string) {
20332033
m.requestUrl = url
20342034
}
20352035

2036+
func updateNoLimitConfigIfChanged(currentValue string, setFunc func(string) error) error {
2037+
var existingRate ratelimit.RateInfo
2038+
if currentValue != "" {
2039+
if err := json.Unmarshal([]byte(currentValue), &existingRate); err == nil {
2040+
if existingRate.LimitType == ratelimit.RateLimitTypeNo {
2041+
return nil
2042+
}
2043+
newRate := ratelimit.RateInfo{
2044+
LimitType: ratelimit.RateLimitTypeNo,
2045+
LimitRate: existingRate.LimitRate,
2046+
CurrentRate: existingRate.CurrentRate,
2047+
StartTime: existingRate.StartTime,
2048+
EndTime: existingRate.EndTime,
2049+
}
2050+
data, err := json.Marshal(&newRate)
2051+
if err != nil {
2052+
return err
2053+
}
2054+
return setFunc(string(data))
2055+
}
2056+
}
2057+
newRate := ratelimit.RateInfo{
2058+
LimitType: ratelimit.RateLimitTypeNo,
2059+
LimitRate: ratelimit.DefaultRateLimit,
2060+
CurrentRate: ratelimit.DefaultRateLimit,
2061+
}
2062+
data, err := json.Marshal(&newRate)
2063+
if err != nil {
2064+
return err
2065+
}
2066+
return setFunc(string(data))
2067+
}
2068+
20362069
func (m *UpdatePlatformManager) UpdateDeliverySpeedLimit() error {
20372070
if err := m.GenIpfsConfig(); err != nil {
20382071
return fmt.Errorf("failed to gen ipfs config: %w", err)
@@ -2056,15 +2089,15 @@ func (m *UpdatePlatformManager) UpdateDeliverySpeedLimit() error {
20562089
if localDownloadRateLimit.Global == nil {
20572090
localDownloadRateLimit.Global = &ratelimit.RateInfo{ // 本地不限速
20582091
LimitType: ratelimit.RateLimitTypeNo,
2059-
LimitRate: int64(ratelimit.MaxRate),
2060-
CurrentRate: int64(ratelimit.MaxRate),
2092+
LimitRate: int64(ratelimit.DefaultRateLimit),
2093+
CurrentRate: int64(ratelimit.DefaultRateLimit),
20612094
}
20622095
}
20632096
if localUploadRateLimit.Global == nil {
20642097
localUploadRateLimit.Global = &ratelimit.RateInfo{ // 本地不限速
20652098
LimitType: ratelimit.RateLimitTypeNo,
2066-
LimitRate: int64(ratelimit.MaxRate),
2067-
CurrentRate: int64(ratelimit.MaxRate),
2099+
LimitRate: int64(ratelimit.DefaultRateLimit),
2100+
CurrentRate: int64(ratelimit.DefaultRateLimit),
20682101
}
20692102
}
20702103

@@ -2101,6 +2134,10 @@ func (m *UpdatePlatformManager) UpdateDeliverySpeedLimit() error {
21012134
logger.Warning(err)
21022135
}
21032136
}
2137+
} else {
2138+
if err := updateNoLimitConfigIfChanged(m.config.DeliveryRemoteUploadGlobalLimit, m.config.SetDeliveryRemoteUploadGlobalLimit); err != nil {
2139+
logger.Warning(err)
2140+
}
21042141
}
21052142
if uploadLimitRate.BusyLimitRemote != nil {
21062143
remoteUploadPeakData, err := json.Marshal(uploadLimitRate.BusyLimitRemote)
@@ -2109,6 +2146,10 @@ func (m *UpdatePlatformManager) UpdateDeliverySpeedLimit() error {
21092146
logger.Warning(err)
21102147
}
21112148
}
2149+
} else {
2150+
if err := updateNoLimitConfigIfChanged(m.config.DeliveryRemoteUploadPeakLimit, m.config.SetDeliveryRemoteUploadPeakLimit); err != nil {
2151+
logger.Warning(err)
2152+
}
21122153
}
21132154
if uploadLimitRate.FreeLimitRemote != nil {
21142155
remoteUploadOffPeakData, err := json.Marshal(uploadLimitRate.FreeLimitRemote)
@@ -2117,6 +2158,10 @@ func (m *UpdatePlatformManager) UpdateDeliverySpeedLimit() error {
21172158
logger.Warning(err)
21182159
}
21192160
}
2161+
} else {
2162+
if err := updateNoLimitConfigIfChanged(m.config.DeliveryRemoteUploadOffPeakLimit, m.config.SetDeliveryRemoteUploadOffPeakLimit); err != nil {
2163+
logger.Warning(err)
2164+
}
21202165
}
21212166

21222167
if downloadLimitRate.GlobalLimitRemote != nil {
@@ -2126,6 +2171,10 @@ func (m *UpdatePlatformManager) UpdateDeliverySpeedLimit() error {
21262171
logger.Warning(err)
21272172
}
21282173
}
2174+
} else {
2175+
if err := updateNoLimitConfigIfChanged(m.config.DeliveryRemoteDownloadGlobalLimit, m.config.SetDeliveryRemoteDownloadGlobalLimit); err != nil {
2176+
logger.Warning(err)
2177+
}
21292178
}
21302179
if downloadLimitRate.BusyLimitRemote != nil {
21312180
remoteDownloadPeakData, err := json.Marshal(downloadLimitRate.BusyLimitRemote)
@@ -2134,6 +2183,10 @@ func (m *UpdatePlatformManager) UpdateDeliverySpeedLimit() error {
21342183
logger.Warning(err)
21352184
}
21362185
}
2186+
} else {
2187+
if err := updateNoLimitConfigIfChanged(m.config.DeliveryRemoteDownloadPeakLimit, m.config.SetDeliveryRemoteDownloadPeakLimit); err != nil {
2188+
logger.Warning(err)
2189+
}
21372190
}
21382191
if downloadLimitRate.FreeLimitRemote != nil {
21392192
remoteDownloadOffPeakData, err := json.Marshal(downloadLimitRate.FreeLimitRemote)
@@ -2142,6 +2195,10 @@ func (m *UpdatePlatformManager) UpdateDeliverySpeedLimit() error {
21422195
logger.Warning(err)
21432196
}
21442197
}
2198+
} else {
2199+
if err := updateNoLimitConfigIfChanged(m.config.DeliveryRemoteDownloadOffPeakLimit, m.config.SetDeliveryRemoteDownloadOffPeakLimit); err != nil {
2200+
logger.Warning(err)
2201+
}
21452202
}
21462203

21472204
if uploadLimitRate.GlobalLimitLocal != nil {
@@ -2151,6 +2208,10 @@ func (m *UpdatePlatformManager) UpdateDeliverySpeedLimit() error {
21512208
logger.Warning(err)
21522209
}
21532210
}
2211+
} else {
2212+
if err := updateNoLimitConfigIfChanged(m.config.DeliveryLocalUploadGlobalLimit, m.config.SetDeliveryLocalUploadGlobalLimit); err != nil {
2213+
logger.Warning(err)
2214+
}
21542215
}
21552216
if uploadLimitRate.BusyLimitLocal != nil {
21562217
localUploadPeakData, err := json.Marshal(uploadLimitRate.BusyLimitLocal)
@@ -2159,6 +2220,10 @@ func (m *UpdatePlatformManager) UpdateDeliverySpeedLimit() error {
21592220
logger.Warning(err)
21602221
}
21612222
}
2223+
} else {
2224+
if err := updateNoLimitConfigIfChanged(m.config.DeliveryLocalUploadPeakLimit, m.config.SetDeliveryLocalUploadPeakLimit); err != nil {
2225+
logger.Warning(err)
2226+
}
21622227
}
21632228
if uploadLimitRate.FreeLimitLocal != nil {
21642229
localUploadOffPeakData, err := json.Marshal(uploadLimitRate.FreeLimitLocal)
@@ -2167,6 +2232,10 @@ func (m *UpdatePlatformManager) UpdateDeliverySpeedLimit() error {
21672232
logger.Warning(err)
21682233
}
21692234
}
2235+
} else {
2236+
if err := updateNoLimitConfigIfChanged(m.config.DeliveryLocalUploadOffPeakLimit, m.config.SetDeliveryLocalUploadOffPeakLimit); err != nil {
2237+
logger.Warning(err)
2238+
}
21702239
}
21712240

21722241
if downloadLimitRate.GlobalLimitLocal != nil {
@@ -2176,6 +2245,10 @@ func (m *UpdatePlatformManager) UpdateDeliverySpeedLimit() error {
21762245
logger.Warning(err)
21772246
}
21782247
}
2248+
} else {
2249+
if err := updateNoLimitConfigIfChanged(m.config.DeliveryLocalDownloadGlobalLimit, m.config.SetDeliveryLocalDownloadGlobalLimit); err != nil {
2250+
logger.Warning(err)
2251+
}
21792252
}
21802253
if downloadLimitRate.BusyLimitLocal != nil {
21812254
localDownloadPeakData, err := json.Marshal(downloadLimitRate.BusyLimitLocal)
@@ -2184,6 +2257,10 @@ func (m *UpdatePlatformManager) UpdateDeliverySpeedLimit() error {
21842257
logger.Warning(err)
21852258
}
21862259
}
2260+
} else {
2261+
if err := updateNoLimitConfigIfChanged(m.config.DeliveryLocalDownloadPeakLimit, m.config.SetDeliveryLocalDownloadPeakLimit); err != nil {
2262+
logger.Warning(err)
2263+
}
21872264
}
21882265
if downloadLimitRate.FreeLimitLocal != nil {
21892266
localDownloadOffPeakData, err := json.Marshal(downloadLimitRate.FreeLimitLocal)
@@ -2192,6 +2269,10 @@ func (m *UpdatePlatformManager) UpdateDeliverySpeedLimit() error {
21922269
logger.Warning(err)
21932270
}
21942271
}
2272+
} else {
2273+
if err := updateNoLimitConfigIfChanged(m.config.DeliveryLocalDownloadOffPeakLimit, m.config.SetDeliveryLocalDownloadOffPeakLimit); err != nil {
2274+
logger.Warning(err)
2275+
}
21952276
}
21962277

21972278
return nil

usr/share/dsg/configs/org.deepin.dde.lastore/org.deepin.dde.lastore.json

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -636,7 +636,7 @@
636636
"visibility": "private"
637637
},
638638
"delivery-remote-download-global-limit": {
639-
"value": "",
639+
"value": "{\"LimitType\":0,\"StartTime\":\"0001-01-01T00:00:00Z\",\"EndTime\":\"0001-01-01T00:00:00Z\",\"LimitRate\":10240,\"CurrentRate\":10240}",
640640
"serial": 0,
641641
"flags": [
642642
"global"
@@ -649,7 +649,7 @@
649649
"visibility": "private"
650650
},
651651
"delivery-remote-upload-global-limit": {
652-
"value": "",
652+
"value": "{\"LimitType\":0,\"StartTime\":\"0001-01-01T00:00:00Z\",\"EndTime\":\"0001-01-01T00:00:00Z\",\"LimitRate\":10240,\"CurrentRate\":10240}",
653653
"serial": 0,
654654
"flags": [
655655
"global"
@@ -662,7 +662,7 @@
662662
"visibility": "private"
663663
},
664664
"delivery-remote-download-peak-limit": {
665-
"value": "",
665+
"value": "{\"LimitType\":0,\"StartTime\":\"0001-01-01T00:00:00Z\",\"EndTime\":\"0001-01-01T00:00:00Z\",\"LimitRate\":10240,\"CurrentRate\":10240}",
666666
"serial": 0,
667667
"flags": [
668668
"global"
@@ -675,7 +675,7 @@
675675
"visibility": "private"
676676
},
677677
"delivery-remote-upload-peak-limit": {
678-
"value": "",
678+
"value": "{\"LimitType\":0,\"StartTime\":\"0001-01-01T00:00:00Z\",\"EndTime\":\"0001-01-01T00:00:00Z\",\"LimitRate\":10240,\"CurrentRate\":10240}",
679679
"serial": 0,
680680
"flags": [
681681
"global"
@@ -688,7 +688,7 @@
688688
"visibility": "private"
689689
},
690690
"delivery-remote-download-offpeak-limit": {
691-
"value": "",
691+
"value": "{\"LimitType\":0,\"StartTime\":\"0001-01-01T00:00:00Z\",\"EndTime\":\"0001-01-01T00:00:00Z\",\"LimitRate\":10240,\"CurrentRate\":10240}",
692692
"serial": 0,
693693
"flags": [
694694
"global"
@@ -701,7 +701,7 @@
701701
"visibility": "private"
702702
},
703703
"delivery-remote-upload-offpeak-limit": {
704-
"value": "",
704+
"value": "{\"LimitType\":0,\"StartTime\":\"0001-01-01T00:00:00Z\",\"EndTime\":\"0001-01-01T00:00:00Z\",\"LimitRate\":10240,\"CurrentRate\":10240}",
705705
"serial": 0,
706706
"flags": [
707707
"global"
@@ -714,7 +714,7 @@
714714
"visibility": "private"
715715
},
716716
"delivery-local-download-global-limit": {
717-
"value": "",
717+
"value": "{\"LimitType\":0,\"StartTime\":\"0001-01-01T00:00:00Z\",\"EndTime\":\"0001-01-01T00:00:00Z\",\"LimitRate\":10240,\"CurrentRate\":10240}",
718718
"serial": 0,
719719
"flags": [
720720
"global"
@@ -727,7 +727,7 @@
727727
"visibility": "private"
728728
},
729729
"delivery-local-upload-global-limit": {
730-
"value": "",
730+
"value": "{\"LimitType\":0,\"StartTime\":\"0001-01-01T00:00:00Z\",\"EndTime\":\"0001-01-01T00:00:00Z\",\"LimitRate\":10240,\"CurrentRate\":10240}",
731731
"serial": 0,
732732
"flags": [
733733
"global"
@@ -740,7 +740,7 @@
740740
"visibility": "private"
741741
},
742742
"delivery-local-download-peak-limit": {
743-
"value": "",
743+
"value": "{\"LimitType\":0,\"StartTime\":\"0001-01-01T00:00:00Z\",\"EndTime\":\"0001-01-01T00:00:00Z\",\"LimitRate\":10240,\"CurrentRate\":10240}",
744744
"serial": 0,
745745
"flags": [
746746
"global"
@@ -753,7 +753,7 @@
753753
"visibility": "private"
754754
},
755755
"delivery-local-upload-peak-limit": {
756-
"value": "",
756+
"value": "{\"LimitType\":0,\"StartTime\":\"0001-01-01T00:00:00Z\",\"EndTime\":\"0001-01-01T00:00:00Z\",\"LimitRate\":10240,\"CurrentRate\":10240}",
757757
"serial": 0,
758758
"flags": [
759759
"global"
@@ -766,7 +766,7 @@
766766
"visibility": "private"
767767
},
768768
"delivery-local-download-offpeak-limit": {
769-
"value": "",
769+
"value": "{\"LimitType\":0,\"StartTime\":\"0001-01-01T00:00:00Z\",\"EndTime\":\"0001-01-01T00:00:00Z\",\"LimitRate\":10240,\"CurrentRate\":10240}",
770770
"serial": 0,
771771
"flags": [
772772
"global"
@@ -779,7 +779,7 @@
779779
"visibility": "private"
780780
},
781781
"delivery-local-upload-offpeak-limit": {
782-
"value": "",
782+
"value": "{\"LimitType\":0,\"StartTime\":\"0001-01-01T00:00:00Z\",\"EndTime\":\"0001-01-01T00:00:00Z\",\"LimitRate\":10240,\"CurrentRate\":10240}",
783783
"serial": 0,
784784
"flags": [
785785
"global"

0 commit comments

Comments
 (0)