Skip to content

Commit 9fb118e

Browse files
committed
feat(12-13): removing hardcoded defaults
1 parent 1f2b156 commit 9fb118e

File tree

3 files changed

+201
-2
lines changed

3 files changed

+201
-2
lines changed
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
package mg12
2+
3+
import (
4+
log "github.com/ipfs/fs-repo-migrations/tools/stump"
5+
)
6+
7+
// convertRouting converts Routing.Type to implicit default
8+
// https://github.com/ipfs/kubo/pull/9475
9+
func convertRouting(confMap map[string]any) {
10+
routing, _ := confMap["Routing"].(map[string]any)
11+
if routing == nil {
12+
log.Log("No Routing field in config, skipping")
13+
return
14+
}
15+
16+
rType, ok := routing["Type"].(string)
17+
if !ok {
18+
log.Log("No Routing.Type field in config, skipping")
19+
return
20+
}
21+
if rType == "dht" || rType == "" {
22+
delete(routing, "Type")
23+
} else {
24+
log.Log("Routing.Type settings is different than the old default, skipping")
25+
}
26+
}
27+
28+
// convertReprovider converts Reprovider to implicit defaults
29+
// https://github.com/ipfs/kubo/pull/9326
30+
func convertReprovider(confMap map[string]any) {
31+
reprovider, _ := confMap["Reprovider"].(map[string]any)
32+
if reprovider == nil {
33+
log.Log("No Reprovider field in config, skipping")
34+
return
35+
}
36+
37+
interval, ok := reprovider["Interval"].(string)
38+
if !ok {
39+
log.Log("No Reprovider.Interval field in config, skipping")
40+
return
41+
}
42+
if interval == "12h" {
43+
delete(reprovider, "Interval")
44+
} else {
45+
log.Log("Reprovider.Interval settings is different than the old default, skipping")
46+
}
47+
48+
strategy, ok := reprovider["Strategy"].(string)
49+
if !ok {
50+
log.Log("No Reprovider.Strategy field in config, skipping")
51+
return
52+
}
53+
if strategy == "all" {
54+
delete(reprovider, "Strategy")
55+
} else {
56+
log.Log("Reprovider.Strategy settings is different than the old default, skipping")
57+
}
58+
}
59+
60+
// convertConnMgr converts Swarm.ConnMgr to implicit defaults
61+
// https://github.com/ipfs/kubo/pull/9467
62+
func convertConnMgr(confMap map[string]any) {
63+
swarm, _ := confMap["Swarm"].(map[string]any)
64+
if swarm == nil {
65+
log.Log("No Swarm field in config, skipping")
66+
return
67+
}
68+
connmgr, _ := swarm["ConnMgr"].(map[string]any)
69+
if connmgr == nil {
70+
log.Log("No Swarm.ConnMgr field in config, skipping")
71+
return
72+
}
73+
cmType, ok := connmgr["Type"].(string)
74+
if !ok {
75+
log.Log("No Swarm.ConnMgr.Type field in config, skipping")
76+
return
77+
}
78+
cmLowWater, ok := connmgr["LowWater"].(float64)
79+
if !ok {
80+
log.Log("No Swarm.ConnMgr.LowWater field in config, skipping")
81+
return
82+
}
83+
cmHighWater, ok := connmgr["HighWater"].(float64)
84+
if !ok {
85+
log.Log("No Swarm.ConnMgr.HighWater field in config, skipping")
86+
return
87+
}
88+
cmGrace, ok := connmgr["GracePeriod"].(string)
89+
if !ok {
90+
log.Log("No Swarm.ConnMgr.GracePeriod field in config, skipping")
91+
return
92+
}
93+
94+
if cmType == "basic" {
95+
delete(connmgr, "Type")
96+
if cmGrace == "20s" {
97+
delete(connmgr, "GracePeriod")
98+
} else {
99+
log.Log("Swarm.ConnMgr.GracePeriod setting are different than the old defaults, skipping")
100+
}
101+
if int(cmLowWater) == 600 && int(cmHighWater) == 900 {
102+
delete(connmgr, "LowWater")
103+
delete(connmgr, "HighWater")
104+
} else {
105+
log.Log("Swarm.ConnMgr Low/HighWater settings are different than the old defaults, skipping")
106+
}
107+
} else {
108+
log.Log("Swarm.ConnMgr settings are different than the old defaults, skipping")
109+
}
110+
}
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package mg12
2+
3+
import (
4+
"bytes"
5+
"encoding/json"
6+
"io/ioutil"
7+
"regexp"
8+
"strings"
9+
"testing"
10+
)
11+
12+
var beforeConfig = `{
13+
"Reprovider": {
14+
"Interval": "12h",
15+
"Strategy": "all"
16+
},
17+
"Routing": {
18+
"Methods": {},
19+
"Routers": {},
20+
"Type": "dht"
21+
},
22+
"Swarm": {
23+
"ConnMgr": {
24+
"GracePeriod": "20s",
25+
"HighWater": 900,
26+
"LowWater": 600,
27+
"Type": "basic"
28+
}
29+
}
30+
}`
31+
32+
var afterConfig = `{
33+
"Reprovider": {},
34+
"Routing": {
35+
"Methods": {},
36+
"Routers": {}
37+
},
38+
"Swarm": {
39+
"ConnMgr": {}
40+
}
41+
}`
42+
43+
func TestKubo18ConfigMigration(t *testing.T) {
44+
out := new(bytes.Buffer)
45+
46+
data, err := ioutil.ReadAll(strings.NewReader(beforeConfig))
47+
if err != nil {
48+
t.Fatal(err)
49+
}
50+
51+
confMap := make(map[string]interface{})
52+
if err = json.Unmarshal(data, &confMap); err != nil {
53+
t.Fatal(err)
54+
}
55+
56+
// Kubo 0.18
57+
convertRouting(confMap)
58+
convertReprovider(confMap)
59+
convertConnMgr(confMap)
60+
61+
fixed, err := json.MarshalIndent(confMap, "", " ")
62+
if err != nil {
63+
t.Fatal(err)
64+
}
65+
66+
if _, err := out.Write(fixed); err != nil {
67+
t.Fatal(err)
68+
}
69+
_, err = out.Write([]byte("\n"))
70+
if err != nil {
71+
t.Fatal(err)
72+
}
73+
74+
forward := out.String()
75+
if noSpace(forward) != noSpace(afterConfig) {
76+
t.Fatalf("Mismatch\nConversion produced:\n%s\nExpected:\n%s\n", forward, afterConfig)
77+
}
78+
}
79+
80+
var whitespaceRe = regexp.MustCompile(`\s`)
81+
82+
func noSpace(str string) string {
83+
return whitespaceRe.ReplaceAllString(str, "")
84+
}

fs-repo-12-to-13/migration/migration.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
// package mg12 contains the code to perform 12-13 repository migration in Kubo.
2-
// This just change some config fields to add webtransport listens on ones that quic uses.
2+
// This just change some config fields to add webtransport listens on ones that quic uses,
3+
// and removes some hardcoded defaults that are no longer present on fresh 'ipfs init'.
34
package mg12
45

56
import (
@@ -27,7 +28,7 @@ func (m Migration) Versions() string {
2728
return "12-to-13"
2829
}
2930

30-
// Reversible returns false, as you can just use the backup config file.
31+
// Reversible returns true, as we keep old config around
3132
func (m Migration) Reversible() bool {
3233
return true
3334
}
@@ -156,6 +157,10 @@ func convert(in io.Reader, out io.Writer) error {
156157
runOnAllAddressFields(confMap, multiaddrPatternReplace(true, "/quic", "/quic-v1", "/p2p-circuit"))
157158
runOnAllAddressFields(confMap, multiaddrPatternReplace(true, "/quic-v1", "/quic-v1/webtransport", "/p2p-circuit", "/webtransport"))
158159

160+
convertRouting(confMap)
161+
convertReprovider(confMap)
162+
convertConnMgr(confMap)
163+
159164
fixed, err := json.MarshalIndent(confMap, "", " ")
160165
if err != nil {
161166
return err

0 commit comments

Comments
 (0)