routing: remove embedded struct from timedPairResult

This prepares for decoupling the result interpretation of a single
payment attempt from the information stored in mission control memory
on the history of a node pair. A planned follow-up where we store both
the last success and last failure requires this decoupling.
This commit is contained in:
Joost Jager 2019-09-26 15:27:41 +02:00
parent 8ed7583448
commit 912a8201f9
No known key found for this signature in database
GPG Key ID: A61B9D4C393C59C7
2 changed files with 48 additions and 29 deletions

@ -125,7 +125,24 @@ type timedPairResult struct {
// timestamp is the time when this result was obtained.
timestamp time.Time
pairResult
// minPenalizeAmt is the minimum amount for which a penalty should be
// applied based on this result. Only applies to fail results.
minPenalizeAmt lnwire.MilliSatoshi
// success indicates whether the payment attempt was successful through
// this pair.
success bool
}
// newTimedPairResult wraps a pair result with a timestamp.
func newTimedPairResult(timestamp time.Time,
result pairResult) timedPairResult {
return timedPairResult{
timestamp: timestamp,
minPenalizeAmt: result.minPenalizeAmt,
success: result.success,
}
}
// MissionControlSnapshot contains a snapshot of the current state of mission
@ -278,10 +295,9 @@ func (m *MissionControl) setAllFail(fromNode route.Vertex,
}
for connection := range nodePairs {
nodePairs[connection] = timedPairResult{
timestamp: timestamp,
pairResult: failPairResult(0),
}
nodePairs[connection] = newTimedPairResult(
timestamp, failPairResult(0),
)
}
}
@ -468,10 +484,13 @@ func (m *MissionControl) applyPaymentResult(
pair, pairResult.minPenalizeAmt)
}
m.setLastPairResult(pair.From, pair.To, timedPairResult{
timestamp: result.timeReply,
pairResult: pairResult,
})
m.setLastPairResult(
pair.From, pair.To,
newTimedPairResult(
result.timeReply,
pairResult,
),
)
}
return i.finalFailureReason

@ -84,10 +84,10 @@ func TestProbabilityEstimatorOneSuccess(t *testing.T) {
ctx := newEstimatorTestContext(t)
ctx.results = map[int]timedPairResult{
node1: {
timestamp: testTime.Add(-time.Hour),
pairResult: successPairResult(),
},
node1: newTimedPairResult(
testTime.Add(-time.Hour),
successPairResult(),
),
}
// Because of the previous success, this channel keep reporting a high
@ -108,10 +108,10 @@ func TestProbabilityEstimatorOneFailure(t *testing.T) {
ctx := newEstimatorTestContext(t)
ctx.results = map[int]timedPairResult{
node1: {
timestamp: testTime.Add(-time.Hour),
pairResult: failPairResult(0),
},
node1: newTimedPairResult(
testTime.Add(-time.Hour),
failPairResult(0),
),
}
// For an untried node, we expected the node probability. The weight for
@ -131,18 +131,18 @@ func TestProbabilityEstimatorMix(t *testing.T) {
ctx := newEstimatorTestContext(t)
ctx.results = map[int]timedPairResult{
node1: {
timestamp: testTime.Add(-time.Hour),
pairResult: successPairResult(),
},
node2: {
timestamp: testTime.Add(-2 * time.Hour),
pairResult: failPairResult(0),
},
node3: {
timestamp: testTime.Add(-3 * time.Hour),
pairResult: failPairResult(0),
},
node1: newTimedPairResult(
testTime.Add(-time.Hour),
successPairResult(),
),
node2: newTimedPairResult(
testTime.Add(-2*time.Hour),
failPairResult(0),
),
node3: newTimedPairResult(
testTime.Add(-3*time.Hour),
failPairResult(0),
),
}
// We expect the probability for a previously successful channel to