graph/db: thread context through FetchNodeFeatures

This commit is contained in:
Elle Mouton committed 2026-02-25 15:32:05 +02:00
1 parent 13a8356558
commit b1873e63ec
8 files changed
+30 -22

No files matched your search

+3 -3
View File
@@ -236,14 +236,14 @@ func (c *ChannelGraph) ForEachNodeDirectedChannel(node route.Vertex,
// features instead of the database. // features instead of the database.
// //
// NOTE: this is part of the graphdb.NodeTraverser interface. // NOTE: this is part of the graphdb.NodeTraverser interface.
func (c *ChannelGraph) FetchNodeFeatures(node route.Vertex) ( func (c *ChannelGraph) FetchNodeFeatures(ctx context.Context,
*lnwire.FeatureVector, error) { node route.Vertex) (*lnwire.FeatureVector, error) {
if c.graphCache != nil { if c.graphCache != nil {
return c.graphCache.GetFeatures(node), nil return c.graphCache.GetFeatures(node), nil
} }
return c.db.FetchNodeFeatures(lnwire.GossipVersion1, node) return c.db.FetchNodeFeatures(ctx, lnwire.GossipVersion1, node)
} }
// GraphSession will provide the call-back with access to a NodeTraverser // GraphSession will provide the call-back with access to a NodeTraverser
+2 -2
View File
@@ -298,13 +298,13 @@ func testNodeInsertionAndDeletion(t *testing.T, v lnwire.GossipVersion) {
// Check that the node's features are fetched correctly. This check // Check that the node's features are fetched correctly. This check
// will use the graph cache to fetch the features. // will use the graph cache to fetch the features.
features, err := graph.FetchNodeFeatures(node.PubKeyBytes) features, err := graph.FetchNodeFeatures(ctx, node.PubKeyBytes)
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, testFeatures, features) require.Equal(t, testFeatures, features)
// Check that the node's features are fetched correctly. This check // Check that the node's features are fetched correctly. This check
// will check the database directly. // will check the database directly.
features, err = graph.FetchNodeFeatures(node.PubKeyBytes) features, err = graph.FetchNodeFeatures(ctx, node.PubKeyBytes)
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, testFeatures, features) require.Equal(t, testFeatures, features)
+3 -2
View File
@@ -25,7 +25,8 @@ type NodeTraverser interface {
cb func(channel *DirectedChannel) error, reset func()) error cb func(channel *DirectedChannel) error, reset func()) error
// FetchNodeFeatures returns the features of the given node. // FetchNodeFeatures returns the features of the given node.
FetchNodeFeatures(nodePub route.Vertex) (*lnwire.FeatureVector, error) FetchNodeFeatures(ctx context.Context,
nodePub route.Vertex) (*lnwire.FeatureVector, error)
} }
// Store represents the main interface for the channel graph database for all // Store represents the main interface for the channel graph database for all
@@ -37,7 +38,7 @@ type Store interface { //nolint:interfacebloat
cb func(channel *DirectedChannel) error, reset func()) error cb func(channel *DirectedChannel) error, reset func()) error
// FetchNodeFeatures returns the features of the given node. // FetchNodeFeatures returns the features of the given node.
FetchNodeFeatures(v lnwire.GossipVersion, FetchNodeFeatures(ctx context.Context, v lnwire.GossipVersion,
nodePub route.Vertex) (*lnwire.FeatureVector, error) nodePub route.Vertex) (*lnwire.FeatureVector, error)
// AddNode adds a vertex/node to the graph database. If the // AddNode adds a vertex/node to the graph database. If the
+3 -2
View File
@@ -684,7 +684,7 @@ func (c *KVStore) ForEachNodeDirectedChannel(v lnwire.GossipVersion,
// known for the node, an empty feature vector is returned. // known for the node, an empty feature vector is returned.
// //
// NOTE: this is part of the graphdb.NodeTraverser interface. // NOTE: this is part of the graphdb.NodeTraverser interface.
func (c *KVStore) FetchNodeFeatures(v lnwire.GossipVersion, func (c *KVStore) FetchNodeFeatures(_ context.Context, v lnwire.GossipVersion,
nodePub route.Vertex) (*lnwire.FeatureVector, error) { nodePub route.Vertex) (*lnwire.FeatureVector, error) {
if v != lnwire.GossipVersion1 { if v != lnwire.GossipVersion1 {
@@ -4511,7 +4511,8 @@ func (c *nodeTraverserSession) ForEachNodeDirectedChannel(
// unknown, assume no additional features are supported. // unknown, assume no additional features are supported.
// //
// NOTE: Part of the NodeTraverser interface. // NOTE: Part of the NodeTraverser interface.
func (c *nodeTraverserSession) FetchNodeFeatures(nodePub route.Vertex) ( func (c *nodeTraverserSession) FetchNodeFeatures(_ context.Context,
nodePub route.Vertex) (
*lnwire.FeatureVector, error) { *lnwire.FeatureVector, error) {
return c.db.fetchNodeFeatures(c.tx, nodePub) return c.db.fetchNodeFeatures(c.tx, nodePub)
+5 -7
View File
@@ -447,10 +447,9 @@ func (s *SQLStore) DeleteNode(ctx context.Context, v lnwire.GossipVersion,
// known for the node, an empty feature vector is returned. // known for the node, an empty feature vector is returned.
// //
// NOTE: this is part of the graphdb.NodeTraverser interface. // NOTE: this is part of the graphdb.NodeTraverser interface.
func (s *SQLStore) FetchNodeFeatures(v lnwire.GossipVersion, func (s *SQLStore) FetchNodeFeatures(ctx context.Context,
nodePub route.Vertex) (*lnwire.FeatureVector, error) { v lnwire.GossipVersion, nodePub route.Vertex) (*lnwire.FeatureVector,
error) {
ctx := context.TODO()
return fetchNodeFeatures(ctx, s.db, v, nodePub) return fetchNodeFeatures(ctx, s.db, v, nodePub)
} }
@@ -3391,11 +3390,10 @@ func (s *sqlNodeTraverser) ForEachNodeDirectedChannel(
// unknown, assume no additional features are supported. // unknown, assume no additional features are supported.
// //
// NOTE: Part of the NodeTraverser interface. // NOTE: Part of the NodeTraverser interface.
func (s *sqlNodeTraverser) FetchNodeFeatures(nodePub route.Vertex) ( func (s *sqlNodeTraverser) FetchNodeFeatures(ctx context.Context,
nodePub route.Vertex) (
*lnwire.FeatureVector, error) { *lnwire.FeatureVector, error) {
ctx := context.TODO()
return fetchNodeFeatures(ctx, s.db, lnwire.GossipVersion1, nodePub) return fetchNodeFeatures(ctx, s.db, lnwire.GossipVersion1, nodePub)
} }
+3 -1
View File
@@ -1,6 +1,7 @@
package routing package routing
import ( import (
"context"
"fmt" "fmt"
"github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/btcutil"
@@ -19,7 +20,8 @@ type Graph interface {
reset func()) error reset func()) error
// FetchNodeFeatures returns the features of the given node. // FetchNodeFeatures returns the features of the given node.
FetchNodeFeatures(nodePub route.Vertex) (*lnwire.FeatureVector, error) FetchNodeFeatures(ctx context.Context,
nodePub route.Vertex) (*lnwire.FeatureVector, error)
} }
// GraphSessionFactory can be used to gain access to a graphdb.NodeTraverser // GraphSessionFactory can be used to gain access to a graphdb.NodeTraverser
+3 -2
View File
@@ -2,6 +2,7 @@ package routing
import ( import (
"bytes" "bytes"
"context"
"fmt" "fmt"
"testing" "testing"
@@ -221,8 +222,8 @@ func (m *mockGraph) sourceNode() route.Vertex {
// fetchNodeFeatures returns the features of the given node. // fetchNodeFeatures returns the features of the given node.
// //
// NOTE: Part of the Graph interface. // NOTE: Part of the Graph interface.
func (m *mockGraph) FetchNodeFeatures(nodePub route.Vertex) ( func (m *mockGraph) FetchNodeFeatures(_ context.Context,
*lnwire.FeatureVector, error) { _ route.Vertex) (*lnwire.FeatureVector, error) {
return lnwire.EmptyFeatureVector(), nil return lnwire.EmptyFeatureVector(), nil
} }
+8 -3
View File
@@ -3,6 +3,7 @@ package routing
import ( import (
"bytes" "bytes"
"container/heap" "container/heap"
"context"
"errors" "errors"
"fmt" "fmt"
"math" "math"
@@ -621,7 +622,9 @@ func findPath(g *graphParams, r *RestrictParams, cfg *PathFindingConfig,
features := r.DestFeatures features := r.DestFeatures
if features == nil { if features == nil {
var err error var err error
features, err = g.graph.FetchNodeFeatures(target) features, err = g.graph.FetchNodeFeatures(
context.TODO(), target,
)
if err != nil { if err != nil {
return nil, 0, err return nil, 0, err
} }
@@ -1019,7 +1022,9 @@ func findPath(g *graphParams, r *RestrictParams, cfg *PathFindingConfig,
} }
// Fetch node features fresh from the graph. // Fetch node features fresh from the graph.
fromFeatures, err := g.graph.FetchNodeFeatures(node) fromFeatures, err := g.graph.FetchNodeFeatures(
context.TODO(), node,
)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -1349,7 +1354,7 @@ func findBlindedPaths(g Graph, target route.Vertex,
return true, nil return true, nil
} }
features, err := g.FetchNodeFeatures(node) features, err := g.FetchNodeFeatures(context.TODO(), node)
if err != nil { if err != nil {
return false, err return false, err
} }