graph/db: define a NodeTraverser interface

Which describes methods that will use the graph cache if it is available
for fast read-only calls.
This commit is contained in:
Elle Mouton 2025-02-13 08:50:19 +02:00
parent 8ec08fbfa4
commit 99c9440520
No known key found for this signature in database
GPG Key ID: D7D916376026F177
2 changed files with 18 additions and 0 deletions

View File

@ -602,6 +602,8 @@ func (c *ChannelGraph) FetchNodeFeaturesTx(tx kvdb.RTx,
// of the database. // of the database.
// //
// Unknown policies are passed into the callback as nil values. // Unknown policies are passed into the callback as nil values.
//
// NOTE: this is part of the graphdb.NodeTraverser interface.
func (c *ChannelGraph) ForEachNodeDirectedChannel(nodePub route.Vertex, func (c *ChannelGraph) ForEachNodeDirectedChannel(nodePub route.Vertex,
cb func(channel *DirectedChannel) error) error { cb func(channel *DirectedChannel) error) error {
@ -612,6 +614,8 @@ func (c *ChannelGraph) ForEachNodeDirectedChannel(nodePub route.Vertex,
// known for the node, an empty feature vector is returned. // known for the node, an empty feature vector is returned.
// If the graphCache is available, then it will be used to retrieve the node's // If the graphCache is available, then it will be used to retrieve the node's
// features instead of the database. // features instead of the database.
//
// NOTE: this is part of the graphdb.NodeTraverser interface.
func (c *ChannelGraph) FetchNodeFeatures(nodePub route.Vertex) ( func (c *ChannelGraph) FetchNodeFeatures(nodePub route.Vertex) (
*lnwire.FeatureVector, error) { *lnwire.FeatureVector, error) {

View File

@ -2,6 +2,7 @@ package graphdb
import ( import (
"github.com/lightningnetwork/lnd/graph/db/models" "github.com/lightningnetwork/lnd/graph/db/models"
"github.com/lightningnetwork/lnd/lnwire"
"github.com/lightningnetwork/lnd/routing/route" "github.com/lightningnetwork/lnd/routing/route"
) )
@ -23,3 +24,16 @@ type NodeRTx interface {
// the same transaction. // the same transaction.
FetchNode(node route.Vertex) (NodeRTx, error) FetchNode(node route.Vertex) (NodeRTx, error)
} }
// NodeTraverser is an abstract read only interface that provides information
// about nodes and their edges. The interface is about providing fast read-only
// access to the graph and so if a cache is available, it should be used.
type NodeTraverser interface {
// ForEachNodeDirectedChannel calls the callback for every channel of
// the given node.
ForEachNodeDirectedChannel(nodePub route.Vertex,
cb func(channel *DirectedChannel) error) error
// FetchNodeFeatures returns the features of the given node.
FetchNodeFeatures(nodePub route.Vertex) (*lnwire.FeatureVector, error)
}