Skip to content

Commit 53fd7d8

Browse files
committed
ipns(pubsub): utilize persistent pubsub value store
1 parent ec748a7 commit 53fd7d8

File tree

7 files changed

+70
-25
lines changed

7 files changed

+70
-25
lines changed

core/node/groups.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,10 @@ func LibP2P(bcfg *BuildCfg, cfg *config.Config) fx.Option {
6767

6868
// parse PubSub config
6969

70-
ps := fx.Options()
70+
ps, disc := fx.Options(), fx.Options()
7171
if bcfg.getOpt("pubsub") || bcfg.getOpt("ipnsps") {
72+
disc = fx.Provide(libp2p.TopicDiscovery())
73+
7274
var pubsubOptions []pubsub.Option
7375
pubsubOptions = append(
7476
pubsubOptions,
@@ -113,6 +115,7 @@ func LibP2P(bcfg *BuildCfg, cfg *config.Config) fx.Option {
113115
maybeInvoke(libp2p.AutoNATService(cfg.Experimental.QUIC), cfg.Swarm.EnableAutoNATService),
114116
connmgr,
115117
ps,
118+
disc,
116119
)
117120

118121
return opts

core/node/libp2p/pubsub.go

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
11
package libp2p
22

33
import (
4-
host "github.com/libp2p/go-libp2p-core/host"
4+
"github.com/libp2p/go-libp2p-core/discovery"
5+
"github.com/libp2p/go-libp2p-core/host"
56
pubsub "github.com/libp2p/go-libp2p-pubsub"
67
"go.uber.org/fx"
78

89
"github.com/ipfs/go-ipfs/core/node/helpers"
910
)
1011

1112
func FloodSub(pubsubOptions ...pubsub.Option) interface{} {
12-
return func(mctx helpers.MetricsCtx, lc fx.Lifecycle, host host.Host) (service *pubsub.PubSub, err error) {
13-
return pubsub.NewFloodSub(helpers.LifecycleCtx(mctx, lc), host, pubsubOptions...)
13+
return func(mctx helpers.MetricsCtx, lc fx.Lifecycle, host host.Host, disc discovery.Discovery) (service *pubsub.PubSub, err error) {
14+
return pubsub.NewFloodSub(helpers.LifecycleCtx(mctx, lc), host, append(pubsubOptions, pubsub.WithDiscovery(disc))...)
1415
}
1516
}
1617

1718
func GossipSub(pubsubOptions ...pubsub.Option) interface{} {
18-
return func(mctx helpers.MetricsCtx, lc fx.Lifecycle, host host.Host) (service *pubsub.PubSub, err error) {
19-
return pubsub.NewGossipSub(helpers.LifecycleCtx(mctx, lc), host, pubsubOptions...)
19+
return func(mctx helpers.MetricsCtx, lc fx.Lifecycle, host host.Host, disc discovery.Discovery) (service *pubsub.PubSub, err error) {
20+
return pubsub.NewGossipSub(helpers.LifecycleCtx(mctx, lc), host, append(pubsubOptions, pubsub.WithDiscovery(disc))...)
2021
}
2122
}

core/node/libp2p/routing.go

+9-4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package libp2p
33
import (
44
"context"
55
"sort"
6+
"time"
67

78
host "github.com/libp2p/go-libp2p-core/host"
89
routing "github.com/libp2p/go-libp2p-core/routing"
@@ -83,15 +84,19 @@ type p2pPSRoutingIn struct {
8384
PubSub *pubsub.PubSub `optional:"true"`
8485
}
8586

86-
func PubsubRouter(mctx helpers.MetricsCtx, lc fx.Lifecycle, in p2pPSRoutingIn) (p2pRouterOut, *namesys.PubsubValueStore) {
87-
psRouter := namesys.NewPubsubValueStore(
87+
func PubsubRouter(mctx helpers.MetricsCtx, lc fx.Lifecycle, in p2pPSRoutingIn) (p2pRouterOut, *namesys.PubsubValueStore, error) {
88+
psRouter, err := namesys.NewPubsubValueStore(
8889
helpers.LifecycleCtx(mctx, lc),
8990
in.Host,
90-
in.BaseIpfsRouting,
9191
in.PubSub,
9292
in.Validator,
93+
namesys.WithRebroadcastInterval(time.Minute),
9394
)
9495

96+
if err != nil {
97+
return p2pRouterOut{}, nil, err
98+
}
99+
95100
return p2pRouterOut{
96101
Router: Router{
97102
Routing: &routinghelpers.Compose{
@@ -102,5 +107,5 @@ func PubsubRouter(mctx helpers.MetricsCtx, lc fx.Lifecycle, in p2pPSRoutingIn) (
102107
},
103108
Priority: 100,
104109
},
105-
}, psRouter
110+
}, psRouter, nil
106111
}

core/node/libp2p/topicdiscovery.go

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package libp2p
2+
3+
import (
4+
"math/rand"
5+
"time"
6+
7+
"github.com/libp2p/go-libp2p-core/discovery"
8+
"github.com/libp2p/go-libp2p-core/host"
9+
disc "github.com/libp2p/go-libp2p-discovery"
10+
11+
"github.com/ipfs/go-ipfs/core/node/helpers"
12+
"go.uber.org/fx"
13+
)
14+
15+
func TopicDiscovery() interface{} {
16+
return func(mctx helpers.MetricsCtx, lc fx.Lifecycle, host host.Host, cr BaseIpfsRouting) (service discovery.Discovery, err error) {
17+
baseDisc := disc.NewRoutingDiscovery(cr)
18+
minBackoff, maxBackoff := time.Second*60, time.Hour
19+
rng := rand.New(rand.NewSource(rand.Int63()))
20+
d, err := disc.NewBackoffDiscovery(
21+
baseDisc,
22+
disc.NewExponentialBackoff(minBackoff, maxBackoff, disc.FullJitter, time.Second, 5.0, 0, rng),
23+
)
24+
25+
if err != nil {
26+
return nil, err
27+
}
28+
29+
return d, nil
30+
}
31+
}

docs/examples/go-ipfs-as-a-library/main.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -292,10 +292,10 @@ func main() {
292292

293293
bootstrapNodes := []string{
294294
// IPFS Bootstrapper nodes.
295-
"/dnsaddr/bootstrap.libp2p.io/ipfs/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN",
296-
"/dnsaddr/bootstrap.libp2p.io/ipfs/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa",
297-
"/dnsaddr/bootstrap.libp2p.io/ipfs/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb",
298-
"/dnsaddr/bootstrap.libp2p.io/ipfs/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt",
295+
"/dnsaddr/bootstrap.libp2p.io/ipfs/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN",
296+
"/dnsaddr/bootstrap.libp2p.io/ipfs/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa",
297+
"/dnsaddr/bootstrap.libp2p.io/ipfs/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb",
298+
"/dnsaddr/bootstrap.libp2p.io/ipfs/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt",
299299

300300
// IPFS Cluster Pinning nodes
301301
"/ip4/138.201.67.219/tcp/4001/ipfs/QmUd6zHcbkbcs7SMxwLs48qZVX3vpcM8errYS7xEczwRMA",

go.mod

+4-4
Original file line numberDiff line numberDiff line change
@@ -60,16 +60,17 @@ require (
6060
github.com/libp2p/go-libp2p-autonat-svc v0.1.0
6161
github.com/libp2p/go-libp2p-circuit v0.1.3
6262
github.com/libp2p/go-libp2p-connmgr v0.1.1
63-
github.com/libp2p/go-libp2p-core v0.2.3
63+
github.com/libp2p/go-libp2p-core v0.2.4
64+
github.com/libp2p/go-libp2p-discovery v0.2.0
6465
github.com/libp2p/go-libp2p-http v0.1.4
6566
github.com/libp2p/go-libp2p-kad-dht v0.2.1
6667
github.com/libp2p/go-libp2p-kbucket v0.2.1
6768
github.com/libp2p/go-libp2p-loggables v0.1.0
6869
github.com/libp2p/go-libp2p-mplex v0.2.1
6970
github.com/libp2p/go-libp2p-peerstore v0.1.3
7071
github.com/libp2p/go-libp2p-pnet v0.1.0
71-
github.com/libp2p/go-libp2p-pubsub v0.1.1
72-
github.com/libp2p/go-libp2p-pubsub-router v0.1.0
72+
github.com/libp2p/go-libp2p-pubsub v0.2.1
73+
github.com/libp2p/go-libp2p-pubsub-router v0.1.1-0.20191111061427-2fcdcceaeaab
7374
github.com/libp2p/go-libp2p-quic-transport v0.1.1
7475
github.com/libp2p/go-libp2p-record v0.1.1
7576
github.com/libp2p/go-libp2p-routing-helpers v0.1.0
@@ -102,7 +103,6 @@ require (
102103
go.uber.org/goleak v0.10.0 // indirect
103104
go.uber.org/multierr v1.1.0 // indirect
104105
go4.org v0.0.0-20190313082347-94abd6928b1d // indirect
105-
golang.org/x/crypto v0.0.0-20190926180335-cea2066c6411 // indirect
106106
golang.org/x/sync v0.0.0-20190423024810-112230192c58 // indirect
107107
golang.org/x/sys v0.0.0-20190926180325-855e68c8590b
108108
gopkg.in/cheggaaa/pb.v1 v1.0.28

go.sum

+12-7
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,8 @@ github.com/libp2p/go-libp2p-core v0.2.0/go.mod h1:X0eyB0Gy93v0DZtSYbEM7RnMChm9Uv
349349
github.com/libp2p/go-libp2p-core v0.2.2/go.mod h1:8fcwTbsG2B+lTgRJ1ICZtiM5GWCWZVoVrLaDRvIRng0=
350350
github.com/libp2p/go-libp2p-core v0.2.3 h1:zXikZ5pLfebtTMeIYfcwVQ2Pae77O0FIwDquwM6AGNM=
351351
github.com/libp2p/go-libp2p-core v0.2.3/go.mod h1:GqhyQqyIAPsxFYXHMjfXgMv03lxsvM0mFzuYA9Ib42A=
352+
github.com/libp2p/go-libp2p-core v0.2.4 h1:Et6ykkTwI6PU44tr8qUF9k43vP0aduMNniShAbUJJw8=
353+
github.com/libp2p/go-libp2p-core v0.2.4/go.mod h1:STh4fdfa5vDYr0/SzYYeqnt+E6KfEV5VxfIrm0bcI0g=
352354
github.com/libp2p/go-libp2p-crypto v0.0.1/go.mod h1:yJkNyDmO341d5wwXxDUGO0LykUVT72ImHNUqh5D/dBE=
353355
github.com/libp2p/go-libp2p-crypto v0.0.2/go.mod h1:eETI5OUfBnvARGOHrJz2eWNyTUxEGZnBxMcbUjfIj4I=
354356
github.com/libp2p/go-libp2p-crypto v0.1.0 h1:k9MFy+o2zGDNGsaoZl0MA3iZ75qXxr9OOoAZF+sD5OQ=
@@ -357,6 +359,8 @@ github.com/libp2p/go-libp2p-discovery v0.0.1/go.mod h1:ZkkF9xIFRLA1xCc7bstYFkd80
357359
github.com/libp2p/go-libp2p-discovery v0.0.5/go.mod h1:YtF20GUxjgoKZ4zmXj8j3Nb2TUSBHFlOCetzYdbZL5I=
358360
github.com/libp2p/go-libp2p-discovery v0.1.0 h1:j+R6cokKcGbnZLf4kcNwpx6mDEUPF3N6SrqMymQhmvs=
359361
github.com/libp2p/go-libp2p-discovery v0.1.0/go.mod h1:4F/x+aldVHjHDHuX85x1zWoFTGElt8HnoDzwkFZm29g=
362+
github.com/libp2p/go-libp2p-discovery v0.2.0 h1:1p3YSOq7VsgaL+xVHPi8XAmtGyas6D2J6rWBEfz/aiY=
363+
github.com/libp2p/go-libp2p-discovery v0.2.0/go.mod h1:s4VGaxYMbw4+4+tsoQTqh7wfxg97AEdo4GYBt6BadWg=
360364
github.com/libp2p/go-libp2p-gostream v0.2.0 h1:YGLebbo8KfylSkuralCCyas/hVrgWjc+cfnLMCZWvEs=
361365
github.com/libp2p/go-libp2p-gostream v0.2.0/go.mod h1:nN/Aw00orrADXaXgNCeYjCtQrk6eT20PX/G8F12NW/s=
362366
github.com/libp2p/go-libp2p-host v0.0.1/go.mod h1:qWd+H1yuU0m5CwzAkvbSjqKairayEHdR5MMl7Cwa7Go=
@@ -400,11 +404,10 @@ github.com/libp2p/go-libp2p-pnet v0.1.0 h1:kRUES28dktfnHNIRW4Ro78F7rKBHBiw5MJpl0
400404
github.com/libp2p/go-libp2p-pnet v0.1.0/go.mod h1:ZkyZw3d0ZFOex71halXRihWf9WH/j3OevcJdTmD0lyE=
401405
github.com/libp2p/go-libp2p-protocol v0.0.1/go.mod h1:Af9n4PiruirSDjHycM1QuiMi/1VZNHYcK8cLgFJLZ4s=
402406
github.com/libp2p/go-libp2p-protocol v0.1.0/go.mod h1:KQPHpAabB57XQxGrXCNvbL6UEXfQqUgC/1adR2Xtflk=
403-
github.com/libp2p/go-libp2p-pubsub v0.1.0/go.mod h1:ZwlKzRSe1eGvSIdU5bD7+8RZN/Uzw0t1Bp9R1znpR/Q=
404-
github.com/libp2p/go-libp2p-pubsub v0.1.1 h1:phDnQvO3H3hAgaEEQi6yt3LILqIYVXaw05bxzezrEwQ=
405-
github.com/libp2p/go-libp2p-pubsub v0.1.1/go.mod h1:ZwlKzRSe1eGvSIdU5bD7+8RZN/Uzw0t1Bp9R1znpR/Q=
406-
github.com/libp2p/go-libp2p-pubsub-router v0.1.0 h1:xA5B8Sdx64tNlSRIcay2QUngtlu8LpUJClaUk/dYYrg=
407-
github.com/libp2p/go-libp2p-pubsub-router v0.1.0/go.mod h1:PnHOshBr/2I2ZxVfEsqfgCQPsVg09zo+DhSlWkOhPFM=
407+
github.com/libp2p/go-libp2p-pubsub v0.2.1 h1:t0Mb7xSIYw3eR7WEMnhC7BXoHF4I/cHRpFrw7K3JeJ8=
408+
github.com/libp2p/go-libp2p-pubsub v0.2.1/go.mod h1:Jscj3fk23R5mCrOwb625xjVs5ZEyTZcx/OlTwMDqU+g=
409+
github.com/libp2p/go-libp2p-pubsub-router v0.1.1-0.20191111061427-2fcdcceaeaab h1:upGMP9YYJ/+IZSVoEQ14E8WOA56h86KDXCMav/g8DjM=
410+
github.com/libp2p/go-libp2p-pubsub-router v0.1.1-0.20191111061427-2fcdcceaeaab/go.mod h1:CeModTwYOlqcWtbc+7N1F3RhG7nbY3h9s3g5iHHe/AQ=
408411
github.com/libp2p/go-libp2p-quic-transport v0.1.1 h1:MFMJzvsxIEDEVKzO89BnB/FgvMj9WI4GDGUW2ArDPUA=
409412
github.com/libp2p/go-libp2p-quic-transport v0.1.1/go.mod h1:wqG/jzhF3Pu2NrhJEvE+IE0NTHNXslOPn9JQzyCAxzU=
410413
github.com/libp2p/go-libp2p-record v0.0.1/go.mod h1:grzqg263Rug/sRex85QrDOLntdFAymLDLm7lxMgU79Q=
@@ -465,6 +468,8 @@ github.com/libp2p/go-nat v0.0.3 h1:l6fKV+p0Xa354EqQOQP+d8CivdLM4kl5GxC1hSc/UeI=
465468
github.com/libp2p/go-nat v0.0.3/go.mod h1:88nUEt0k0JD45Bk93NIwDqjlhiOwOoV36GchpcVc1yI=
466469
github.com/libp2p/go-openssl v0.0.2 h1:9pP2d3Ubaxkv7ZisLjx9BFwgOGnQdQYnfcH29HNY3ls=
467470
github.com/libp2p/go-openssl v0.0.2/go.mod h1:v8Zw2ijCSWBQi8Pq5GAixw6DbFfa9u6VIYDXnvOXkc0=
471+
github.com/libp2p/go-openssl v0.0.3 h1:wjlG7HvQkt4Fq4cfH33Ivpwp0omaElYEi9z26qaIkIk=
472+
github.com/libp2p/go-openssl v0.0.3/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc=
468473
github.com/libp2p/go-reuseport v0.0.1 h1:7PhkfH73VXfPJYKQ6JwS5I/eVcoyYi9IMNGc6FWpFLw=
469474
github.com/libp2p/go-reuseport v0.0.1/go.mod h1:jn6RmB1ufnQwl0Q1f+YxAj8isJgDCQzaaxIFYDhcYEA=
470475
github.com/libp2p/go-reuseport-transport v0.0.1/go.mod h1:YkbSDrvjUVDL6b8XqriyA20obEtsW9BLkuOUyQAOCbs=
@@ -698,8 +703,8 @@ golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8U
698703
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
699704
golang.org/x/crypto v0.0.0-20190618222545-ea8f1a30c443/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
700705
golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY=
701-
golang.org/x/crypto v0.0.0-20190926180335-cea2066c6411 h1:kuW9k4QvBJpRjC3rxEytsfIYPs8oGY3Jw7iR36h0FIY=
702-
golang.org/x/crypto v0.0.0-20190926180335-cea2066c6411/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
706+
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8=
707+
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
703708
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
704709
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
705710
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=

0 commit comments

Comments
 (0)