diff --git a/graph/sources/chan_graph.go b/graph/sources/chan_graph.go index 7e215b6fb..57d7c2098 100644 --- a/graph/sources/chan_graph.go +++ b/graph/sources/chan_graph.go @@ -4,6 +4,7 @@ import ( "context" "fmt" + "github.com/btcsuite/btcd/wire" graphdb "github.com/lightningnetwork/lnd/graph/db" "github.com/lightningnetwork/lnd/graph/db/models" "github.com/lightningnetwork/lnd/graph/session" @@ -105,6 +106,17 @@ func (s *DBSource) IsPublicNode(_ context.Context, return s.db.IsPublicNode(pubKey) } +// FetchChannelEdgesByOutpoint returns the channel edge info and most recent +// channel edge policies for a given outpoint. +// +// NOTE: this is part of the netann.ChannelGraph interface. +func (s *DBSource) FetchChannelEdgesByOutpoint(_ context.Context, + point *wire.OutPoint) (*models.ChannelEdgeInfo, + *models.ChannelEdgePolicy, *models.ChannelEdgePolicy, error) { + + return s.db.FetchChannelEdgesByOutpoint(point) +} + // kvdbRTx is an implementation of graphdb.RTx backed by a KVDB database read // transaction. type kvdbRTx struct { diff --git a/graph/sources/interfaces.go b/graph/sources/interfaces.go index a1439615a..0753eec3b 100644 --- a/graph/sources/interfaces.go +++ b/graph/sources/interfaces.go @@ -3,6 +3,7 @@ package sources import ( "github.com/lightningnetwork/lnd/graph/session" "github.com/lightningnetwork/lnd/lnrpc/invoicesrpc" + "github.com/lightningnetwork/lnd/netann" ) // GraphSource defines the read-only graph interface required by LND for graph @@ -10,4 +11,5 @@ import ( type GraphSource interface { session.ReadOnlyGraph invoicesrpc.GraphSource + netann.ChannelGraph } diff --git a/netann/chan_status_manager.go b/netann/chan_status_manager.go index feb3a5dd1..91d147acc 100644 --- a/netann/chan_status_manager.go +++ b/netann/chan_status_manager.go @@ -1,6 +1,7 @@ package netann import ( + "context" "errors" "sync" "time" @@ -653,8 +654,12 @@ func (m *ChanStatusManager) signAndSendNextUpdate(outpoint wire.OutPoint, func (m *ChanStatusManager) fetchLastChanUpdateByOutPoint(op wire.OutPoint) ( *lnwire.ChannelUpdate1, bool, error) { + ctx := context.TODO() + // Get the edge info and policies for this channel from the graph. - info, edge1, edge2, err := m.cfg.Graph.FetchChannelEdgesByOutpoint(&op) + info, edge1, edge2, err := m.cfg.Graph.FetchChannelEdgesByOutpoint( + ctx, &op, + ) if err != nil { return nil, false, err } diff --git a/netann/chan_status_manager_test.go b/netann/chan_status_manager_test.go index 320981d63..4c3cc25ae 100644 --- a/netann/chan_status_manager_test.go +++ b/netann/chan_status_manager_test.go @@ -2,6 +2,7 @@ package netann_test import ( "bytes" + "context" "crypto/rand" "encoding/binary" "fmt" @@ -160,7 +161,7 @@ func (g *mockGraph) FetchAllOpenChannels() ([]*channeldb.OpenChannel, error) { return g.chans(), nil } -func (g *mockGraph) FetchChannelEdgesByOutpoint( +func (g *mockGraph) FetchChannelEdgesByOutpoint(ctx context.Context, op *wire.OutPoint) (*models.ChannelEdgeInfo, *models.ChannelEdgePolicy, *models.ChannelEdgePolicy, error) { diff --git a/netann/interface.go b/netann/interface.go index aa559435d..78acc24cd 100644 --- a/netann/interface.go +++ b/netann/interface.go @@ -1,6 +1,8 @@ package netann import ( + "context" + "github.com/btcsuite/btcd/wire" "github.com/lightningnetwork/lnd/channeldb" "github.com/lightningnetwork/lnd/graph/db/models" @@ -19,6 +21,7 @@ type DB interface { type ChannelGraph interface { // FetchChannelEdgesByOutpoint returns the channel edge info and most // recent channel edge policies for a given outpoint. - FetchChannelEdgesByOutpoint(*wire.OutPoint) (*models.ChannelEdgeInfo, - *models.ChannelEdgePolicy, *models.ChannelEdgePolicy, error) + FetchChannelEdgesByOutpoint(context.Context, *wire.OutPoint) ( + *models.ChannelEdgeInfo, *models.ChannelEdgePolicy, + *models.ChannelEdgePolicy, error) } diff --git a/peer/test_utils.go b/peer/test_utils.go index eb510a53b..ce92dadff 100644 --- a/peer/test_utils.go +++ b/peer/test_utils.go @@ -20,6 +20,7 @@ import ( "github.com/lightningnetwork/lnd/channelnotifier" "github.com/lightningnetwork/lnd/fn" graphdb "github.com/lightningnetwork/lnd/graph/db" + "github.com/lightningnetwork/lnd/graph/sources" "github.com/lightningnetwork/lnd/htlcswitch" "github.com/lightningnetwork/lnd/input" "github.com/lightningnetwork/lnd/keychain" @@ -628,7 +629,7 @@ func createTestPeer(t *testing.T) *peerTestCtx { ChanEnableTimeout: chanActiveTimeout, ChanDisableTimeout: 2 * time.Minute, DB: dbAliceChannel.ChannelStateDB(), - Graph: dbAliceGraph, + Graph: sources.NewDBGSource(dbAliceGraph), MessageSigner: nodeSignerAlice, OurPubKey: aliceKeyPub, OurKeyLoc: testKeyLoc, diff --git a/server.go b/server.go index 4c0e52bc7..5d5a45d33 100644 --- a/server.go +++ b/server.go @@ -772,7 +772,7 @@ func newServer(cfg *Config, listenAddrs []net.Addr, IsChannelActive: s.htlcSwitch.HasActiveLink, ApplyChannelUpdate: s.applyChannelUpdate, DB: s.chanStateDB, - Graph: dbs.GraphDB, + Graph: graphSource, } chanStatusMgr, err := netann.NewChanStatusManager(chanStatusMgrCfg)