mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-01-19 14:45:23 +01:00
routing+routerrpc+lnrpc: add option to use mc in queryroutes
A boolean flag is added to the QueryRoutes rpc that allows feeding mission control probabilities into path finding.
This commit is contained in:
parent
7f4c42847c
commit
fc337cd34f
@ -167,7 +167,13 @@ func (r *RouterBackend) QueryRoutes(ctx context.Context,
|
||||
return 0
|
||||
}
|
||||
|
||||
return 1
|
||||
if !in.UseMissionControl {
|
||||
return 1
|
||||
}
|
||||
|
||||
return r.MissionControl.GetEdgeProbability(
|
||||
node, edge, amt,
|
||||
)
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -17,6 +17,8 @@ import (
|
||||
const (
|
||||
destKey = "0286098b97bc843372b4426d4b276cea9aa2f48f0428d6f5b66ae101befc14f8b4"
|
||||
ignoreNodeKey = "02f274f48f3c0d590449a6776e3ce8825076ac376e470e992246eebc565ef8bb2a"
|
||||
|
||||
testMissionControlProb = 0.5
|
||||
)
|
||||
|
||||
var (
|
||||
@ -26,6 +28,15 @@ var (
|
||||
// TestQueryRoutes asserts that query routes rpc parameters are properly parsed
|
||||
// and passed onto path finding.
|
||||
func TestQueryRoutes(t *testing.T) {
|
||||
t.Run("no mission control", func(t *testing.T) {
|
||||
testQueryRoutes(t, false)
|
||||
})
|
||||
t.Run("with mission control", func(t *testing.T) {
|
||||
testQueryRoutes(t, true)
|
||||
})
|
||||
}
|
||||
|
||||
func testQueryRoutes(t *testing.T, useMissionControl bool) {
|
||||
ignoreNodeBytes, err := hex.DecodeString(ignoreNodeKey)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@ -58,6 +69,7 @@ func TestQueryRoutes(t *testing.T) {
|
||||
ChannelId: 555,
|
||||
DirectionReverse: true,
|
||||
}},
|
||||
UseMissionControl: useMissionControl,
|
||||
}
|
||||
|
||||
findRoute := func(source, target route.Vertex,
|
||||
@ -92,9 +104,13 @@ func TestQueryRoutes(t *testing.T) {
|
||||
t.Fatal("expecting 0% probability for ignored node")
|
||||
}
|
||||
|
||||
expectedProb := 1.0
|
||||
if useMissionControl {
|
||||
expectedProb = testMissionControlProb
|
||||
}
|
||||
if restrictions.ProbabilitySource(route.Vertex{},
|
||||
routing.EdgeLocator{}, 0,
|
||||
) != 1 {
|
||||
) != expectedProb {
|
||||
t.Fatal("expecting 100% probability")
|
||||
}
|
||||
|
||||
@ -111,6 +127,7 @@ func TestQueryRoutes(t *testing.T) {
|
||||
|
||||
return 1, nil
|
||||
},
|
||||
MissionControl: &mockMissionControl{},
|
||||
}
|
||||
|
||||
resp, err := backend.QueryRoutes(context.Background(), request)
|
||||
@ -121,3 +138,17 @@ func TestQueryRoutes(t *testing.T) {
|
||||
t.Fatal("expected a single route response")
|
||||
}
|
||||
}
|
||||
|
||||
type mockMissionControl struct {
|
||||
}
|
||||
|
||||
func (m *mockMissionControl) GetEdgeProbability(fromNode route.Vertex,
|
||||
edge routing.EdgeLocator, amt lnwire.MilliSatoshi) float64 {
|
||||
return testMissionControlProb
|
||||
}
|
||||
|
||||
func (m *mockMissionControl) ResetHistory() {}
|
||||
|
||||
func (m *mockMissionControl) GetHistorySnapshot() *routing.MissionControlSnapshot {
|
||||
return nil
|
||||
}
|
||||
|
1008
lnrpc/rpc.pb.go
1008
lnrpc/rpc.pb.go
File diff suppressed because it is too large
Load Diff
@ -1651,6 +1651,12 @@ message QueryRoutesRequest {
|
||||
self is assumed.
|
||||
*/
|
||||
string source_pub_key = 8;
|
||||
|
||||
/**
|
||||
If set to true, edge probabilities from mission control will be used to get
|
||||
the optimal route.
|
||||
*/
|
||||
bool use_mission_control = 9;
|
||||
}
|
||||
|
||||
message EdgeLocator {
|
||||
|
@ -722,6 +722,14 @@
|
||||
"in": "query",
|
||||
"required": false,
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"name": "use_mission_control",
|
||||
"description": "*\nIf set to true, edge probabilities from mission control will be used to get\nthe optimal route.",
|
||||
"in": "query",
|
||||
"required": false,
|
||||
"type": "boolean",
|
||||
"format": "boolean"
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
|
Loading…
Reference in New Issue
Block a user