From 0bb0d66952867bd2d3ef739fb901b65987120055 Mon Sep 17 00:00:00 2001 From: Elle Mouton Date: Wed, 25 Feb 2026 12:44:26 +0200 Subject: [PATCH] graphdb: pass context to GraphSession --- graph/db/graph.go | 6 +++--- graph/db/interfaces.go | 3 ++- graph/db/kv_store.go | 4 ++-- graph/db/sql_store.go | 6 ++---- routing/graph.go | 3 ++- routing/mock_graph_test.go | 4 ++-- routing/pathfind_test.go | 2 +- routing/payment_session.go | 2 ++ routing/payment_session_test.go | 5 +++-- 9 files changed, 19 insertions(+), 16 deletions(-) diff --git a/graph/db/graph.go b/graph/db/graph.go index eaf3526eb..a1eb2e32d 100644 --- a/graph/db/graph.go +++ b/graph/db/graph.go @@ -253,14 +253,14 @@ func (c *ChannelGraph) FetchNodeFeatures(ctx context.Context, // instance which can be used to perform queries against the channel graph. If // the graph cache is not enabled, then the call-back will be provided with // access to the graph via a consistent read-only transaction. -func (c *ChannelGraph) GraphSession(cb func(graph NodeTraverser) error, - reset func()) error { +func (c *ChannelGraph) GraphSession(ctx context.Context, + cb func(graph NodeTraverser) error, reset func()) error { if c.graphCache != nil { return cb(c) } - return c.db.GraphSession(cb, reset) + return c.db.GraphSession(ctx, cb, reset) } // ForEachNodeCached iterates through all the stored vertices/nodes in the diff --git a/graph/db/interfaces.go b/graph/db/interfaces.go index 06c74c910..f50716239 100644 --- a/graph/db/interfaces.go +++ b/graph/db/interfaces.go @@ -156,7 +156,8 @@ type Store interface { //nolint:interfacebloat // GraphSession will provide the call-back with access to a // NodeTraverser instance which can be used to perform queries against // the channel graph. - GraphSession(cb func(graph NodeTraverser) error, reset func()) error + GraphSession(ctx context.Context, + cb func(graph NodeTraverser) error, reset func()) error // ForEachChannel iterates through all the channel edges stored within // the graph and invokes the passed callback for each edge. The callback diff --git a/graph/db/kv_store.go b/graph/db/kv_store.go index a353257d3..c202d76f5 100644 --- a/graph/db/kv_store.go +++ b/graph/db/kv_store.go @@ -4487,8 +4487,8 @@ func (c *KVStore) IsClosedScid(_ context.Context, // GraphSession will provide the call-back with access to a NodeTraverser // instance which can be used to perform queries against the channel graph. -func (c *KVStore) GraphSession(cb func(graph NodeTraverser) error, - reset func()) error { +func (c *KVStore) GraphSession(_ context.Context, + cb func(graph NodeTraverser) error, reset func()) error { return c.db.View(func(tx walletdb.ReadTx) error { return cb(&nodeTraverserSession{ diff --git a/graph/db/sql_store.go b/graph/db/sql_store.go index b31089788..fea367a94 100644 --- a/graph/db/sql_store.go +++ b/graph/db/sql_store.go @@ -3316,10 +3316,8 @@ func (s *SQLStore) IsClosedScid(ctx context.Context, // instance which can be used to perform queries against the channel graph. // // NOTE: part of the Store interface. -func (s *SQLStore) GraphSession(cb func(graph NodeTraverser) error, - reset func()) error { - - var ctx = context.TODO() +func (s *SQLStore) GraphSession(ctx context.Context, + cb func(graph NodeTraverser) error, reset func()) error { return s.db.ExecTx(ctx, sqldb.ReadTxOpt(), func(db SQLQueries) error { return cb(newSQLNodeTraverser(db, s.cfg.ChainHash)) diff --git a/routing/graph.go b/routing/graph.go index 73ca334d3..b245d404e 100644 --- a/routing/graph.go +++ b/routing/graph.go @@ -32,7 +32,8 @@ type GraphSessionFactory interface { // GraphSession will provide the call-back with access to a // graphdb.NodeTraverser instance which can be used to perform queries // against the channel graph. - GraphSession(cb func(graph graphdb.NodeTraverser) error, + GraphSession(ctx context.Context, + cb func(graph graphdb.NodeTraverser) error, reset func()) error } diff --git a/routing/mock_graph_test.go b/routing/mock_graph_test.go index 0f657bda9..210551471 100644 --- a/routing/mock_graph_test.go +++ b/routing/mock_graph_test.go @@ -234,8 +234,8 @@ func (m *mockGraph) FetchNodeFeatures(_ context.Context, // the channel graph. // // NOTE: Part of the GraphSessionFactory interface. -func (m *mockGraph) GraphSession(cb func(graph graphdb.NodeTraverser) error, - _ func()) error { +func (m *mockGraph) GraphSession(_ context.Context, + cb func(graph graphdb.NodeTraverser) error, _ func()) error { return cb(m) } diff --git a/routing/pathfind_test.go b/routing/pathfind_test.go index 3dc1ddfe1..85689ef9e 100644 --- a/routing/pathfind_test.go +++ b/routing/pathfind_test.go @@ -3326,7 +3326,7 @@ func dbFindPath(graph *graphdb.VersionedGraph, } var route []*unifiedEdge - err = graph.GraphSession(func(graph graphdb.NodeTraverser) error { + err = graph.GraphSession(ctx, func(graph graphdb.NodeTraverser) error { route, _, err = findPath( &graphParams{ additionalEdges: additionalEdges, diff --git a/routing/payment_session.go b/routing/payment_session.go index bb795211c..4cddfa2ea 100644 --- a/routing/payment_session.go +++ b/routing/payment_session.go @@ -1,6 +1,7 @@ package routing import ( + "context" "fmt" "github.com/btcsuite/btcd/btcec/v2" @@ -344,6 +345,7 @@ func (p *paymentSession) RequestRoute(maxAmt, feeLimit lnwire.MilliSatoshi, for { err := p.graphSessFactory.GraphSession( + context.TODO(), findPath, func() { path = nil }, diff --git a/routing/payment_session_test.go b/routing/payment_session_test.go index 547fe0e2d..0bc0b6dcb 100644 --- a/routing/payment_session_test.go +++ b/routing/payment_session_test.go @@ -1,6 +1,7 @@ package routing import ( + "context" "testing" "time" @@ -260,8 +261,8 @@ func (g *sessionGraph) sourceNode() route.Vertex { return route.Vertex{} } -func (g *sessionGraph) GraphSession(cb func(graph graphdb.NodeTraverser) error, - _ func()) error { +func (g *sessionGraph) GraphSession(_ context.Context, + cb func(graph graphdb.NodeTraverser) error, _ func()) error { return cb(g) }