Fix: Resource Manager: Filter stats correctly by %
Signed-off-by: Antonio Navarro Perez <antnavper@gmail.com>
Antonio Navarro Perez committed
Dec 7, 2022 at 17:22 UTC
d16e63a23e9c1eeafbe26ed8ea36c3c5229d6caf
4 files changed
+23
-1
core/commands/swarm.go
+5
@@ -360,6 +360,11 @@ The output of this command is JSON.
360
361
percentage, _ := req.Options[swarmUsedResourcesPercentageName].(int)
362
scope := req.Arguments[0]
363
+
364
+ if percentage != 0 && scope != "all" {
365
+ return fmt.Errorf("%q can only be used when scope is %q", swarmUsedResourcesPercentageName, "all")
366
+ }
367
+
368
result, err := libp2p.NetStat(node.ResourceManager, scope, percentage)
369
if err != nil {
370
return err
core/node/libp2p/rcmgr.go
+1
-1
@@ -309,7 +309,7 @@ func abovePercentage(v1, v2, percentage int) bool {
309
return false
310
}
311
312
- return int((v1/v2))*100 >= percentage
312
+ return int((float64(v1)/float64(v2))*100) >= percentage
313
}
314
315
func NetLimitAll(mgr network.ResourceManager) (*NetStatOut, error) {
core/node/libp2p/rcmgr_test.go
new
+12
@@ -0,0 +1,12 @@
1
+package libp2p
2
+
3
+import (
4
+ "testing"
5
+
6
+ "github.com/stretchr/testify/require"
7
+)
8
+
9
+func TestPercentage(t *testing.T) {
10
+ require.True(t, abovePercentage(10, 100, 10))
11
+ require.True(t, abovePercentage(100, 100, 99))
12
+}
test/sharness/t0139-swarm-rcmgr.sh
+5
@@ -62,6 +62,11 @@ test_expect_success 'ResourceMgr enabled: swarm limit reset' '
62
test_cmp reset actual
63
'
64
65
+test_expect_success 'Swarm stats system with filter should fail' '
66
+ test_expect_code 1 ipfs swarm stats system --min-used-limit-perc=99 2> actual &&
67
+ test_should_contain "Error: \"min-used-limit-perc\" can only be used when scope is \"all\"" actual
68
+'
69
+
70
test_expect_success 'ResourceMgr enabled: swarm limit reset on map values' '
71
ipfs swarm limit peer:12D3KooWL7i1T9VSPeF8AgQApbyM51GNKZsYPvNvL347aMDmvNzG --reset --enc=json 2> reset &&
72
ipfs swarm limit peer:12D3KooWL7i1T9VSPeF8AgQApbyM51GNKZsYPvNvL347aMDmvNzG --enc=json 2> actual &&