lnd+graph: add GraphBootstrapper to the GraphSource interface

So that LND can use a different GraphSource for network bootstrapping
and does not need to rely on its local graph db.
This commit is contained in:
Elle Mouton
2024-11-12 08:49:34 +02:00
parent 0f33d41c55
commit 372883ab81
3 changed files with 22 additions and 2 deletions

View File

@@ -8,6 +8,8 @@ import (
"github.com/btcsuite/btcd/btcec/v2"
"github.com/btcsuite/btcd/wire"
"github.com/lightningnetwork/lnd/autopilot"
"github.com/lightningnetwork/lnd/discovery"
graphdb "github.com/lightningnetwork/lnd/graph/db"
"github.com/lightningnetwork/lnd/graph/db/models"
"github.com/lightningnetwork/lnd/graph/session"
@@ -217,6 +219,18 @@ func (s *DBSource) FetchLightningNode(_ context.Context,
return s.db.FetchLightningNode(nodePub)
}
// GraphBootstrapper returns a NetworkPeerBootstrapper instance backed by the
// ChannelGraph instance.
//
// NOTE: this is part of the GraphSource interface.
func (s *DBSource) GraphBootstrapper(_ context.Context) (
discovery.NetworkPeerBootstrapper, error) {
chanGraph := autopilot.ChannelGraphFromDatabase(s.db)
return discovery.NewGraphBootstrapper(chanGraph)
}
// kvdbRTx is an implementation of graphdb.RTx backed by a KVDB database read
// transaction.
type kvdbRTx struct {

View File

@@ -6,6 +6,7 @@ import (
"github.com/btcsuite/btcd/btcec/v2"
"github.com/lightningnetwork/lnd/channeldb"
"github.com/lightningnetwork/lnd/discovery"
"github.com/lightningnetwork/lnd/graph/db/models"
"github.com/lightningnetwork/lnd/graph/session"
"github.com/lightningnetwork/lnd/lnrpc/invoicesrpc"
@@ -68,4 +69,9 @@ type GraphSource interface {
// graphdb.ErrGraphNodeNotFound is returned.
FetchLightningNode(ctx context.Context, nodePub route.Vertex) (
*models.LightningNode, error)
// GraphBootstrapper returns a network peer bootstrapper that can be
// used to discover new peers to connect to.
GraphBootstrapper(ctx context.Context) (
discovery.NetworkPeerBootstrapper, error)
}

View File

@@ -2817,6 +2817,7 @@ out:
// based on the server, and currently active bootstrap mechanisms as defined
// within the current configuration.
func initNetworkBootstrappers(s *server) ([]discovery.NetworkPeerBootstrapper, error) {
ctx := context.TODO()
srvrLog.Infof("Initializing peer network bootstrappers!")
var bootStrappers []discovery.NetworkPeerBootstrapper
@@ -2824,8 +2825,7 @@ func initNetworkBootstrappers(s *server) ([]discovery.NetworkPeerBootstrapper, e
// First, we'll create an instance of the ChannelGraphBootstrapper as
// this can be used by default if we've already partially seeded the
// network.
chanGraph := autopilot.ChannelGraphFromDatabase(s.graphDB)
graphBootstrapper, err := discovery.NewGraphBootstrapper(chanGraph)
graphBootstrapper, err := s.graphSource.GraphBootstrapper(ctx)
if err != nil {
return nil, err
}