diff --git a/examples/chat2/go.sum b/examples/chat2/go.sum index 3c473a1d..a2ca8f54 100644 --- a/examples/chat2/go.sum +++ b/examples/chat2/go.sum @@ -923,6 +923,8 @@ github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DM github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc= +github.com/status-im/go-libp2p-rendezvous v0.0.0-20210929200249-1b6d7e4055e6 h1:nC2lWJGdmLyGqGeIm97fFt3M/F80eLQbrDPH7BpLZVM= +github.com/status-im/go-libp2p-rendezvous v0.0.0-20210929200249-1b6d7e4055e6/go.mod h1:Q/GA4TCj4QLJCO02GN4O1CgkuTkn8oKbQSn1+yratvE= github.com/status-im/go-wakurelay-pubsub v0.4.3-0.20210729162817-adc68830282a h1:eCna/q/PuZVqtmOMBqytw9yzZwMNKpao4au0OJDvesI= github.com/status-im/go-wakurelay-pubsub v0.4.3-0.20210729162817-adc68830282a/go.mod h1:LSCVYR7mnBBsxVJghrGpQ3yJAAATEe6XeQQqGCZhwrE= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= diff --git a/examples/filter2/go.sum b/examples/filter2/go.sum index ad136e3e..e5523d50 100644 --- a/examples/filter2/go.sum +++ b/examples/filter2/go.sum @@ -263,6 +263,7 @@ github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -903,6 +904,8 @@ github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DM github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc= +github.com/status-im/go-libp2p-rendezvous v0.0.0-20210929200249-1b6d7e4055e6 h1:nC2lWJGdmLyGqGeIm97fFt3M/F80eLQbrDPH7BpLZVM= +github.com/status-im/go-libp2p-rendezvous v0.0.0-20210929200249-1b6d7e4055e6/go.mod h1:Q/GA4TCj4QLJCO02GN4O1CgkuTkn8oKbQSn1+yratvE= github.com/status-im/go-wakurelay-pubsub v0.4.3-0.20210729162817-adc68830282a h1:eCna/q/PuZVqtmOMBqytw9yzZwMNKpao4au0OJDvesI= github.com/status-im/go-wakurelay-pubsub v0.4.3-0.20210729162817-adc68830282a/go.mod h1:LSCVYR7mnBBsxVJghrGpQ3yJAAATEe6XeQQqGCZhwrE= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= @@ -921,6 +924,7 @@ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5Cc github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= +github.com/syndtr/goleveldb v1.0.1-0.20210305035536-64b5b1c73954 h1:xQdMZ1WLrgkkvOZ/LDQxjVxMLdby7osSh4ZEVa5sIjs= github.com/syndtr/goleveldb v1.0.1-0.20210305035536-64b5b1c73954/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= diff --git a/go.mod b/go.mod index febc9330..eb07f318 100644 --- a/go.mod +++ b/go.mod @@ -30,9 +30,10 @@ require ( github.com/spf13/cobra v1.1.3 github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/viper v1.7.1 - github.com/status-im/go-libp2p-rendezvous v0.0.0-20210928230014-94a02b1432a3 // indirect + github.com/status-im/go-libp2p-rendezvous v0.0.0-20210929200249-1b6d7e4055e6 github.com/status-im/go-wakurelay-pubsub v0.4.3-0.20210729162817-adc68830282a github.com/stretchr/testify v1.7.0 + github.com/syndtr/goleveldb v1.0.1-0.20210305035536-64b5b1c73954 go.opencensus.io v0.23.0 golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e // indirect gopkg.in/ini.v1 v1.62.0 // indirect diff --git a/go.sum b/go.sum index d91e3d59..1dc97563 100644 --- a/go.sum +++ b/go.sum @@ -236,7 +236,6 @@ github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7a github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= @@ -945,12 +944,10 @@ github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5q github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc= github.com/status-im/go-ethereum v1.10.4-status.2 h1:uvcD2U7skYqPQviARFb4w3wZyFSYLs/pfVrJaRSDcCA= github.com/status-im/go-ethereum v1.10.4-status.2/go.mod h1:GvIhpdCOgMHI6i5xVPEZOrv/qSMeOFHbZh77AoyZUoE= -github.com/status-im/go-libp2p-rendezvous v0.0.0-20210928195017-4397dd0f844d h1:cJkS8VzW0jwOne1ipKiUCjMLbMQU7Xa7XPJCMrjZCNU= -github.com/status-im/go-libp2p-rendezvous v0.0.0-20210928195017-4397dd0f844d/go.mod h1:up+uGvIr4JbhszgZB4fLcFoc0xbihgv1M885ZQrgtIs= -github.com/status-im/go-libp2p-rendezvous v0.0.0-20210928205005-be9b1a0035bf h1:hhkIKjPCMuDd1T5h0DPc4dS2HUc1tzkMw1ReWj7stnY= -github.com/status-im/go-libp2p-rendezvous v0.0.0-20210928205005-be9b1a0035bf/go.mod h1:up+uGvIr4JbhszgZB4fLcFoc0xbihgv1M885ZQrgtIs= -github.com/status-im/go-libp2p-rendezvous v0.0.0-20210928230014-94a02b1432a3 h1:C6Ed5GA9wlvNOZeLi16hMVpEXLb+4AhGSDx/ZljtWbs= -github.com/status-im/go-libp2p-rendezvous v0.0.0-20210928230014-94a02b1432a3/go.mod h1:up+uGvIr4JbhszgZB4fLcFoc0xbihgv1M885ZQrgtIs= +github.com/status-im/go-libp2p-rendezvous v0.0.0-20210929193940-d227fbccda4f h1:i9f5vF50k/JvomNFrxZaWUxKq6TOai6OAUOFVGhi7ro= +github.com/status-im/go-libp2p-rendezvous v0.0.0-20210929193940-d227fbccda4f/go.mod h1:Q/GA4TCj4QLJCO02GN4O1CgkuTkn8oKbQSn1+yratvE= +github.com/status-im/go-libp2p-rendezvous v0.0.0-20210929200249-1b6d7e4055e6 h1:nC2lWJGdmLyGqGeIm97fFt3M/F80eLQbrDPH7BpLZVM= +github.com/status-im/go-libp2p-rendezvous v0.0.0-20210929200249-1b6d7e4055e6/go.mod h1:Q/GA4TCj4QLJCO02GN4O1CgkuTkn8oKbQSn1+yratvE= github.com/status-im/go-wakurelay-pubsub v0.4.3-0.20210729162817-adc68830282a h1:eCna/q/PuZVqtmOMBqytw9yzZwMNKpao4au0OJDvesI= github.com/status-im/go-wakurelay-pubsub v0.4.3-0.20210729162817-adc68830282a/go.mod h1:LSCVYR7mnBBsxVJghrGpQ3yJAAATEe6XeQQqGCZhwrE= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= diff --git a/waku/node.go b/waku/node.go index 0d2b7751..3476acc9 100644 --- a/waku/node.go +++ b/waku/node.go @@ -27,12 +27,15 @@ import ( "github.com/status-im/go-waku/waku/persistence" "github.com/status-im/go-waku/waku/persistence/sqlite" pubsub "github.com/status-im/go-wakurelay-pubsub" + "github.com/syndtr/goleveldb/leveldb" + "github.com/syndtr/goleveldb/leveldb/opt" "github.com/status-im/go-waku/waku/v2/discovery" "github.com/status-im/go-waku/waku/v2/node" "github.com/status-im/go-waku/waku/v2/protocol/relay" libp2pdisc "github.com/libp2p/go-libp2p-core/discovery" + rendezvous "github.com/status-im/go-libp2p-rendezvous" ) var log = logging.Logger("wakunode") @@ -87,6 +90,7 @@ var rootCmd = &cobra.Command{ enableRendezvous, _ := cmd.Flags().GetBool("rendezvous") rendezvousPeerIds, _ := cmd.Flags().GetStringSlice("rendezvous-nodes") enableRendezvousServer, _ := cmd.Flags().GetBool("rendezvous-server") + rendezvousData, _ := cmd.Flags().GetString("rendezvous-data") hostAddr, _ := net.ResolveTCPAddr("tcp", fmt.Sprint("0.0.0.0:", port)) @@ -170,7 +174,10 @@ var rootCmd = &cobra.Command{ } if enableRendezvousServer { - nodeOpts = append(nodeOpts, node.WithRendezvousServer()) + db, err := leveldb.OpenFile(rendezvousData, &opt.Options{OpenFilesCacheCapacity: 3}) + checkError(err, "RendezvousDB") + storage := rendezvous.NewStorage(db) + nodeOpts = append(nodeOpts, node.WithRendezvousServer(storage)) } if wakuFilter { @@ -335,6 +342,7 @@ func init() { rootCmd.Flags().String("dns-discovery-nameserver", "", "DNS nameserver IP to query (empty to use system's default)") rootCmd.Flags().Bool("peer-exchange", true, "Enable GossipSub Peer Exchange") rootCmd.Flags().Bool("rendezvous", false, "Enable rendezvous for peer discovery") + rootCmd.Flags().String("rendezvous-data", "/tmp/rendevouz", "path where peer info will be stored.") rootCmd.Flags().StringSlice("rendezvous-nodes", []string{}, "Peer IDs of waku2 rendezvous nodes. Argument may be repeated") rootCmd.Flags().Bool("rendezvous-server", false, "Node will act as rendezvous server") } diff --git a/waku/v2/node/wakunode2.go b/waku/v2/node/wakunode2.go index f64b4866..0dcb1a8e 100644 --- a/waku/v2/node/wakunode2.go +++ b/waku/v2/node/wakunode2.go @@ -35,8 +35,6 @@ import ( "github.com/status-im/go-waku/waku/v2/protocol/relay" "github.com/status-im/go-waku/waku/v2/protocol/store" wakurelay "github.com/status-im/go-wakurelay-pubsub" - - db "github.com/status-im/go-libp2p-rendezvous/db/sqlite" ) var log = logging.Logger("wakunode") @@ -304,10 +302,15 @@ func (w *WakuNode) Stop() { defer w.cancel() close(w.quit) + defer w.connectednessEventSub.Close() defer w.protocolEventSub.Close() defer w.identificationEventSub.Close() + if w.rendezvous != nil { + w.rendezvous.Stop() + } + for _, topic := range w.relay.Topics() { for _, sub := range w.subscriptions[topic] { sub.Unsubscribe() @@ -315,6 +318,8 @@ func (w *WakuNode) Stop() { } w.subscriptions = nil + + w.host.Close() } func (w *WakuNode) Host() host.Host { @@ -421,11 +426,12 @@ func (w *WakuNode) mountLightPush() { } func (w *WakuNode) mountRendezvous() error { - dbi, err := db.OpenDB(w.ctx, ":memory:") // TODO: replace for levelDB - if err != nil { + w.rendezvous = rendezvous.NewRendezvousService(w.host, w.opts.rendevousStorage) + + if err := w.rendezvous.Start(); err != nil { return err } - w.rendezvous = rendezvous.NewRendezvousService(w.host, dbi) + log.Info("Rendezvous service started") return nil } diff --git a/waku/v2/node/wakuoptions.go b/waku/v2/node/wakuoptions.go index d0e8babc..67554b9a 100644 --- a/waku/v2/node/wakuoptions.go +++ b/waku/v2/node/wakuoptions.go @@ -11,6 +11,7 @@ import ( "github.com/libp2p/go-libp2p-core/peer" ma "github.com/multiformats/go-multiaddr" manet "github.com/multiformats/go-multiaddr-net" + rendezvous "github.com/status-im/go-libp2p-rendezvous" "github.com/status-im/go-waku/waku/v2/protocol/store" wakurelay "github.com/status-im/go-wakurelay-pubsub" ) @@ -35,6 +36,7 @@ type WakuNodeParameters struct { enableRendezvous bool enableRendezvousServer bool + rendevousStorage rendezvous.Storage rendezvousPeers []peer.ID rendezvousOpts []wakurelay.DiscoverOpt @@ -111,9 +113,10 @@ func WithRendezvous(peers []peer.ID, discoverOpts ...wakurelay.DiscoverOpt) Waku } } -func WithRendezvousServer() WakuNodeOption { +func WithRendezvousServer(storage rendezvous.Storage) WakuNodeOption { return func(params *WakuNodeParameters) error { params.enableRendezvousServer = true + params.rendevousStorage = storage return nil } }