mirror of
https://github.com/logos-messaging/logos-messaging-go.git
synced 2026-01-10 09:53:06 +00:00
feat: use leveldb for storing peers and clean up periodically older records from rendezvous server
This commit is contained in:
parent
5d89893dfb
commit
4ff7f3931f
3
go.mod
3
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-20210929193940-d227fbccda4f
|
||||
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
|
||||
|
||||
9
go.sum
9
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,8 @@ 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-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=
|
||||
|
||||
10
waku/node.go
10
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))
|
||||
|
||||
@ -186,7 +190,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 {
|
||||
@ -351,6 +358,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")
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user