mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-08-28 14:40:51 +02:00
routing: remove paymentFailure pointer
This introduces an option instead to signal whether there was a failure for result interpretation.
This commit is contained in:
@@ -276,7 +276,7 @@ type paymentResult struct {
|
|||||||
|
|
||||||
// newPaymentResult constructs a new paymentResult.
|
// newPaymentResult constructs a new paymentResult.
|
||||||
func newPaymentResult(id uint64, rt *mcRoute, timeFwd, timeReply time.Time,
|
func newPaymentResult(id uint64, rt *mcRoute, timeFwd, timeReply time.Time,
|
||||||
failure *paymentFailure) *paymentResult {
|
failure fn.Option[paymentFailure]) *paymentResult {
|
||||||
|
|
||||||
result := &paymentResult{
|
result := &paymentResult{
|
||||||
id: id,
|
id: id,
|
||||||
@@ -289,11 +289,13 @@ func newPaymentResult(id uint64, rt *mcRoute, timeFwd, timeReply time.Time,
|
|||||||
route: tlv.NewRecordT[tlv.TlvType2](*rt),
|
route: tlv.NewRecordT[tlv.TlvType2](*rt),
|
||||||
}
|
}
|
||||||
|
|
||||||
if failure != nil {
|
failure.WhenSome(
|
||||||
result.failure = tlv.SomeRecordT(
|
func(f paymentFailure) {
|
||||||
tlv.NewRecordT[tlv.TlvType3](*failure),
|
result.failure = tlv.SomeRecordT(
|
||||||
)
|
tlv.NewRecordT[tlv.TlvType3](f),
|
||||||
}
|
)
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
@@ -621,7 +623,7 @@ func (m *MissionControl) ReportPaymentFail(paymentID uint64, rt *route.Route,
|
|||||||
|
|
||||||
result := newPaymentResult(
|
result := newPaymentResult(
|
||||||
paymentID, extractMCRoute(rt), timestamp, timestamp,
|
paymentID, extractMCRoute(rt), timestamp, timestamp,
|
||||||
newPaymentFailure(failureSourceIdx, failure),
|
fn.Some(newPaymentFailure(failureSourceIdx, failure)),
|
||||||
)
|
)
|
||||||
|
|
||||||
return m.processPaymentResult(result)
|
return m.processPaymentResult(result)
|
||||||
@@ -635,7 +637,8 @@ func (m *MissionControl) ReportPaymentSuccess(paymentID uint64,
|
|||||||
timestamp := m.cfg.clock.Now()
|
timestamp := m.cfg.clock.Now()
|
||||||
|
|
||||||
result := newPaymentResult(
|
result := newPaymentResult(
|
||||||
paymentID, extractMCRoute(rt), timestamp, timestamp, nil,
|
paymentID, extractMCRoute(rt), timestamp, timestamp,
|
||||||
|
fn.None[paymentFailure](),
|
||||||
)
|
)
|
||||||
|
|
||||||
_, err := m.processPaymentResult(result)
|
_, err := m.processPaymentResult(result)
|
||||||
@@ -832,13 +835,13 @@ func (n *namespacedDB) purge() error {
|
|||||||
// failure with unknown details. Otherwise, the index and failure message are
|
// failure with unknown details. Otherwise, the index and failure message are
|
||||||
// used to populate the info field of the paymentFailure.
|
// used to populate the info field of the paymentFailure.
|
||||||
func newPaymentFailure(sourceIdx *int,
|
func newPaymentFailure(sourceIdx *int,
|
||||||
failureMsg lnwire.FailureMessage) *paymentFailure {
|
failureMsg lnwire.FailureMessage) paymentFailure {
|
||||||
|
|
||||||
if sourceIdx == nil {
|
if sourceIdx == nil {
|
||||||
return &paymentFailure{}
|
return paymentFailure{}
|
||||||
}
|
}
|
||||||
|
|
||||||
return &paymentFailure{
|
return paymentFailure{
|
||||||
sourceIdx: tlv.SomeRecordT(
|
sourceIdx: tlv.SomeRecordT(
|
||||||
tlv.NewPrimitiveRecord[tlv.TlvType0](
|
tlv.NewPrimitiveRecord[tlv.TlvType0](
|
||||||
uint8(*sourceIdx),
|
uint8(*sourceIdx),
|
||||||
|
@@ -7,6 +7,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/btcsuite/btcwallet/walletdb"
|
"github.com/btcsuite/btcwallet/walletdb"
|
||||||
|
"github.com/lightningnetwork/lnd/fn/v2"
|
||||||
"github.com/lightningnetwork/lnd/kvdb"
|
"github.com/lightningnetwork/lnd/kvdb"
|
||||||
"github.com/lightningnetwork/lnd/lntest/wait"
|
"github.com/lightningnetwork/lnd/lntest/wait"
|
||||||
"github.com/lightningnetwork/lnd/lnwire"
|
"github.com/lightningnetwork/lnd/lnwire"
|
||||||
@@ -85,19 +86,19 @@ func TestMissionControlStore(t *testing.T) {
|
|||||||
|
|
||||||
result1 := newPaymentResult(
|
result1 := newPaymentResult(
|
||||||
99, mcStoreTestRoute, testTime, testTime,
|
99, mcStoreTestRoute, testTime, testTime,
|
||||||
newPaymentFailure(
|
fn.Some(newPaymentFailure(
|
||||||
&failureSourceIdx,
|
&failureSourceIdx,
|
||||||
lnwire.NewFailIncorrectDetails(100, 1000),
|
lnwire.NewFailIncorrectDetails(100, 1000),
|
||||||
),
|
)),
|
||||||
)
|
)
|
||||||
|
|
||||||
result2 := newPaymentResult(
|
result2 := newPaymentResult(
|
||||||
2, mcStoreTestRoute, testTime.Add(time.Hour),
|
2, mcStoreTestRoute, testTime.Add(time.Hour),
|
||||||
testTime.Add(time.Hour),
|
testTime.Add(time.Hour),
|
||||||
newPaymentFailure(
|
fn.Some(newPaymentFailure(
|
||||||
&failureSourceIdx,
|
&failureSourceIdx,
|
||||||
lnwire.NewFailIncorrectDetails(100, 1000),
|
lnwire.NewFailIncorrectDetails(100, 1000),
|
||||||
),
|
)),
|
||||||
)
|
)
|
||||||
|
|
||||||
// Store result.
|
// Store result.
|
||||||
@@ -134,7 +135,7 @@ func TestMissionControlStore(t *testing.T) {
|
|||||||
)
|
)
|
||||||
result3.id = 3
|
result3.id = 3
|
||||||
result3.failure = tlv.SomeRecordT(
|
result3.failure = tlv.SomeRecordT(
|
||||||
tlv.NewRecordT[tlv.TlvType3](*newPaymentFailure(
|
tlv.NewRecordT[tlv.TlvType3](newPaymentFailure(
|
||||||
&failureSourceIdx, &lnwire.FailMPPTimeout{},
|
&failureSourceIdx, &lnwire.FailMPPTimeout{},
|
||||||
)),
|
)),
|
||||||
)
|
)
|
||||||
@@ -153,7 +154,7 @@ func TestMissionControlStore(t *testing.T) {
|
|||||||
// Also demonstrate the persistence of a success result.
|
// Also demonstrate the persistence of a success result.
|
||||||
result4 := newPaymentResult(
|
result4 := newPaymentResult(
|
||||||
5, mcStoreTestRoute, testTime.Add(3*time.Hour),
|
5, mcStoreTestRoute, testTime.Add(3*time.Hour),
|
||||||
testTime.Add(3*time.Hour), nil,
|
testTime.Add(3*time.Hour), fn.None[paymentFailure](),
|
||||||
)
|
)
|
||||||
store.AddResult(result4)
|
store.AddResult(result4)
|
||||||
require.NoError(t, store.storeResults())
|
require.NoError(t, store.storeResults())
|
||||||
@@ -186,7 +187,10 @@ func TestMissionControlStoreFlushing(t *testing.T) {
|
|||||||
return newPaymentResult(
|
return newPaymentResult(
|
||||||
lastID, mcStoreTestRoute, testTime.Add(-time.Hour),
|
lastID, mcStoreTestRoute, testTime.Add(-time.Hour),
|
||||||
testTime,
|
testTime,
|
||||||
newPaymentFailure(&failureSourceIdx, failureDetails),
|
fn.Some(newPaymentFailure(
|
||||||
|
&failureSourceIdx,
|
||||||
|
failureDetails,
|
||||||
|
)),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -287,10 +291,10 @@ func BenchmarkMissionControlStoreFlushing(b *testing.B) {
|
|||||||
result := newPaymentResult(
|
result := newPaymentResult(
|
||||||
lastID, mcStoreTestRoute, testTimeFwd,
|
lastID, mcStoreTestRoute, testTimeFwd,
|
||||||
testTime,
|
testTime,
|
||||||
newPaymentFailure(
|
fn.Some(newPaymentFailure(
|
||||||
&failureSourceIdx,
|
&failureSourceIdx,
|
||||||
failureDetails,
|
failureDetails,
|
||||||
),
|
)),
|
||||||
)
|
)
|
||||||
store.AddResult(result)
|
store.AddResult(result)
|
||||||
}
|
}
|
||||||
@@ -305,10 +309,10 @@ func BenchmarkMissionControlStoreFlushing(b *testing.B) {
|
|||||||
results[i] = newPaymentResult(
|
results[i] = newPaymentResult(
|
||||||
0, mcStoreTestRoute, testTimeFwd,
|
0, mcStoreTestRoute, testTimeFwd,
|
||||||
testTime,
|
testTime,
|
||||||
newPaymentFailure(
|
fn.Some(newPaymentFailure(
|
||||||
&failureSourceIdx,
|
&failureSourceIdx,
|
||||||
failureDetails,
|
failureDetails,
|
||||||
),
|
)),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -732,7 +732,7 @@ func TestResultInterpretation(t *testing.T) {
|
|||||||
t.Run(testCase.name, func(t *testing.T) {
|
t.Run(testCase.name, func(t *testing.T) {
|
||||||
var failure fn.Option[paymentFailure]
|
var failure fn.Option[paymentFailure]
|
||||||
if !testCase.success {
|
if !testCase.success {
|
||||||
failure = fn.Some(*newPaymentFailure(
|
failure = fn.Some(newPaymentFailure(
|
||||||
&testCase.failureSrcIdx,
|
&testCase.failureSrcIdx,
|
||||||
testCase.failure,
|
testCase.failure,
|
||||||
))
|
))
|
||||||
|
Reference in New Issue
Block a user