multi: add abstraction for Router and SessionSource graph access

In this commit, we completely remove the Router's dependence on a Graph
source that requires a `kvdb.RTx`. In so doing, we are more prepared for
a future where the Graph source is backed by different DB structure such
as pure SQL.

The two areas affected here are: the ChannelRouter's graph access that
it uses for pathfinding. And the SessionSource's graph access that it
uses for payments.

The ChannelRouter gets given a Graph and the SessionSource is given a
GraphSessionFactory which it can use to create a new session. Behind the
scenes, this will acquire a kvdb.RTx that will be used for calls to the
Graph's `ForEachNodeChannel` method.
This commit is contained in:
Elle Mouton
2024-06-25 19:58:57 -07:00
parent 90d6b863a8
commit 8c0df98439
11 changed files with 288 additions and 128 deletions

View File

@@ -119,9 +119,7 @@ func TestUpdateAdditionalEdge(t *testing.T) {
func(Graph) (bandwidthHints, error) {
return &mockBandwidthHints{}, nil
},
func() (Graph, func(), error) {
return &sessionGraph{}, func() {}, nil
},
newMockGraphSessionFactory(&sessionGraph{}),
&MissionControl{},
PathFindingConfig{},
)
@@ -199,9 +197,7 @@ func TestRequestRoute(t *testing.T) {
func(Graph) (bandwidthHints, error) {
return &mockBandwidthHints{}, nil
},
func() (Graph, func(), error) {
return &sessionGraph{}, func() {}, nil
},
newMockGraphSessionFactory(&sessionGraph{}),
&MissionControl{},
PathFindingConfig{},
)