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:
Joost Jager 2019-06-19 08:29:44 +02:00
parent 7f4c42847c
commit fc337cd34f
No known key found for this signature in database
GPG Key ID: A61B9D4C393C59C7
5 changed files with 563 additions and 500 deletions

View File

@ -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,
)
},
}

View File

@ -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
}

File diff suppressed because it is too large Load Diff

View File

@ -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 {

View File

@ -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": [