Skip to content

Commit

Permalink
p2p,rpc: add rpc to query seed nodes from db (fractalplatform#496)
Browse files Browse the repository at this point in the history
* p2p,rpc: add rpc to query seed nodes from db
  • Loading branch information
peekpi authored Sep 26, 2019
1 parent afc355c commit d0ba828
Show file tree
Hide file tree
Showing 8 changed files with 52 additions and 0 deletions.
10 changes: 10 additions & 0 deletions ftservice/apibackend.go
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,16 @@ func (b *APIBackend) RemoveTrustedPeer(url string) error {
return err
}

// SeedNodes returns all seed nodes.
func (b *APIBackend) SeedNodes() []string {
nodes := b.ftservice.p2pServer.SeedNodes()
ns := make([]string, len(nodes))
for i, node := range nodes {
ns[i] = node.String()
}
return ns
}

// PeerCount returns the number of connected peers.
func (b *APIBackend) PeerCount() int {
return b.ftservice.p2pServer.PeerCount()
Expand Down
1 change: 1 addition & 0 deletions p2p/dial.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ type discoverTable interface {
Resolve(*enode.Node) *enode.Node
LookupRandom() []*enode.Node
ReadRandomNodes([]*enode.Node) int
SeedNodes() []*enode.Node
}

// the dial history remembers recent dials.
Expand Down
2 changes: 2 additions & 0 deletions p2p/dial_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ func (t fakeTable) Close() {}
func (t fakeTable) LookupRandom() []*enode.Node { return nil }
func (t fakeTable) Resolve(*enode.Node) *enode.Node { return nil }
func (t fakeTable) ReadRandomNodes(buf []*enode.Node) int { return copy(buf, t) }
func (t fakeTable) SeedNodes() []*enode.Node { return nil }

// This test checks that dynamic dials are launched from discovery results.
func TestDialStateDynDial(t *testing.T) {
Expand Down Expand Up @@ -703,3 +704,4 @@ func (t *resolveMock) Self() *enode.Node { return new(enode.
func (t *resolveMock) Close() {}
func (t *resolveMock) LookupRandom() []*enode.Node { return nil }
func (t *resolveMock) ReadRandomNodes(buf []*enode.Node) int { return 0 }
func (t *resolveMock) SeedNodes() []*enode.Node { return nil }
5 changes: 5 additions & 0 deletions p2p/discover/table.go
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,11 @@ func (tab *Table) Self() *enode.Node {
return unwrapNode(tab.self)
}

// SeedNodes return all of the seed nodes
func (tab *Table) SeedNodes() []*enode.Node {
return tab.db.QueryAllSeeds()
}

// ReadRandomNodes fills the given slice with random nodes from the table. The results
// are guaranteed to be unique for a single invocation, no node will appear twice.
func (tab *Table) ReadRandomNodes(buf []*enode.Node) (n int) {
Expand Down
24 changes: 24 additions & 0 deletions p2p/enode/nodedb.go
Original file line number Diff line number Diff line change
Expand Up @@ -329,6 +329,30 @@ seek:
return nodes
}

// QueryAllSeeds retrieves all nodes to be used as potential seed nodes
// for bootstrapping.
func (db *DB) QueryAllSeeds() []*Node {
var (
nodes []*Node
it = db.lvl.NewIterator(nil, nil)
)
defer it.Release()
seek:
for it.Next() {
n := nextNode(it)
if n == nil {
break
}
for i := range nodes {
if nodes[i].ID() == n.ID() {
continue seek
}
}
nodes = append(nodes, n)
}
return nodes
}

// reads the next node record from the iterator, skipping over other
// database entries.
func nextNode(it iterator.Iterator) *Node {
Expand Down
4 changes: 4 additions & 0 deletions p2p/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,10 @@ func (srv *Server) Peers() []*Peer {
return ps
}

func (srv *Server) SeedNodes() []*enode.Node {
return srv.ntab.SeedNodes()
}

// PeerCount returns the number of connected peers.
func (srv *Server) PeerCount() int {
var count int
Expand Down
1 change: 1 addition & 0 deletions rpcapi/backend.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ type Backend interface {
RemovePeer(url string) error
AddTrustedPeer(url string) error
RemoveTrustedPeer(url string) error
SeedNodes() []string
PeerCount() int
Peers() []string
BadNodesCount() int
Expand Down
5 changes: 5 additions & 0 deletions rpcapi/p2p.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,11 @@ func (api *PrivateP2pAPI) RemoveTrustedPeer(url string) (bool, error) {
return true, nil
}

// SeedNodes returns all seed nodes.
func (api *PrivateP2pAPI) SeedNodes() []string {
return api.b.SeedNodes()
}

// PeerCount return number of connected peers
func (api *PrivateP2pAPI) PeerCount() int {
return api.b.PeerCount()
Expand Down

0 comments on commit d0ba828

Please sign in to comment.