graph/db: thread context through FetchNodeFeatures
This commit is contained in:
8 files changed
+30
-22
No files matched your search
+3
-3
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user