Skip to content

Commit a450d85

Browse files
committed
routing: remove paymentFailure pointer
This introduces an option instead to signal whether there was a failure for result interpretation.
1 parent 4498a78 commit a450d85

File tree

3 files changed

+30
-23
lines changed

3 files changed

+30
-23
lines changed

routing/missioncontrol.go

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ type paymentResult struct {
276276

277277
// newPaymentResult constructs a new paymentResult.
278278
func newPaymentResult(id uint64, rt *mcRoute, timeFwd, timeReply time.Time,
279-
failure *paymentFailure) *paymentResult {
279+
failure fn.Option[paymentFailure]) *paymentResult {
280280

281281
result := &paymentResult{
282282
id: id,
@@ -289,11 +289,13 @@ func newPaymentResult(id uint64, rt *mcRoute, timeFwd, timeReply time.Time,
289289
route: tlv.NewRecordT[tlv.TlvType2](*rt),
290290
}
291291

292-
if failure != nil {
293-
result.failure = tlv.SomeRecordT(
294-
tlv.NewRecordT[tlv.TlvType3](*failure),
295-
)
296-
}
292+
failure.WhenSome(
293+
func(f paymentFailure) {
294+
result.failure = tlv.SomeRecordT(
295+
tlv.NewRecordT[tlv.TlvType3](f),
296+
)
297+
},
298+
)
297299

298300
return result
299301
}
@@ -621,7 +623,7 @@ func (m *MissionControl) ReportPaymentFail(paymentID uint64, rt *route.Route,
621623

622624
result := newPaymentResult(
623625
paymentID, extractMCRoute(rt), timestamp, timestamp,
624-
newPaymentFailure(failureSourceIdx, failure),
626+
fn.Some(newPaymentFailure(failureSourceIdx, failure)),
625627
)
626628

627629
return m.processPaymentResult(result)
@@ -635,7 +637,8 @@ func (m *MissionControl) ReportPaymentSuccess(paymentID uint64,
635637
timestamp := m.cfg.clock.Now()
636638

637639
result := newPaymentResult(
638-
paymentID, extractMCRoute(rt), timestamp, timestamp, nil,
640+
paymentID, extractMCRoute(rt), timestamp, timestamp,
641+
fn.None[paymentFailure](),
639642
)
640643

641644
_, err := m.processPaymentResult(result)
@@ -832,13 +835,13 @@ func (n *namespacedDB) purge() error {
832835
// failure with unknown details. Otherwise, the index and failure message are
833836
// used to populate the info field of the paymentFailure.
834837
func newPaymentFailure(sourceIdx *int,
835-
failureMsg lnwire.FailureMessage) *paymentFailure {
838+
failureMsg lnwire.FailureMessage) paymentFailure {
836839

837840
if sourceIdx == nil {
838-
return &paymentFailure{}
841+
return paymentFailure{}
839842
}
840843

841-
return &paymentFailure{
844+
return paymentFailure{
842845
sourceIdx: tlv.SomeRecordT(
843846
tlv.NewPrimitiveRecord[tlv.TlvType0](
844847
uint8(*sourceIdx),

routing/missioncontrol_store_test.go

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"time"
88

99
"github.com/btcsuite/btcwallet/walletdb"
10+
"github.com/lightningnetwork/lnd/fn/v2"
1011
"github.com/lightningnetwork/lnd/kvdb"
1112
"github.com/lightningnetwork/lnd/lntest/wait"
1213
"github.com/lightningnetwork/lnd/lnwire"
@@ -85,19 +86,19 @@ func TestMissionControlStore(t *testing.T) {
8586

8687
result1 := newPaymentResult(
8788
99, mcStoreTestRoute, testTime, testTime,
88-
newPaymentFailure(
89+
fn.Some(newPaymentFailure(
8990
&failureSourceIdx,
9091
lnwire.NewFailIncorrectDetails(100, 1000),
91-
),
92+
)),
9293
)
9394

9495
result2 := newPaymentResult(
9596
2, mcStoreTestRoute, testTime.Add(time.Hour),
9697
testTime.Add(time.Hour),
97-
newPaymentFailure(
98+
fn.Some(newPaymentFailure(
9899
&failureSourceIdx,
99100
lnwire.NewFailIncorrectDetails(100, 1000),
100-
),
101+
)),
101102
)
102103

103104
// Store result.
@@ -134,7 +135,7 @@ func TestMissionControlStore(t *testing.T) {
134135
)
135136
result3.id = 3
136137
result3.failure = tlv.SomeRecordT(
137-
tlv.NewRecordT[tlv.TlvType3](*newPaymentFailure(
138+
tlv.NewRecordT[tlv.TlvType3](newPaymentFailure(
138139
&failureSourceIdx, &lnwire.FailMPPTimeout{},
139140
)),
140141
)
@@ -153,7 +154,7 @@ func TestMissionControlStore(t *testing.T) {
153154
// Also demonstrate the persistence of a success result.
154155
result4 := newPaymentResult(
155156
5, mcStoreTestRoute, testTime.Add(3*time.Hour),
156-
testTime.Add(3*time.Hour), nil,
157+
testTime.Add(3*time.Hour), fn.None[paymentFailure](),
157158
)
158159
store.AddResult(result4)
159160
require.NoError(t, store.storeResults())
@@ -186,7 +187,10 @@ func TestMissionControlStoreFlushing(t *testing.T) {
186187
return newPaymentResult(
187188
lastID, mcStoreTestRoute, testTime.Add(-time.Hour),
188189
testTime,
189-
newPaymentFailure(&failureSourceIdx, failureDetails),
190+
fn.Some(newPaymentFailure(
191+
&failureSourceIdx,
192+
failureDetails,
193+
)),
190194
)
191195
}
192196

@@ -287,10 +291,10 @@ func BenchmarkMissionControlStoreFlushing(b *testing.B) {
287291
result := newPaymentResult(
288292
lastID, mcStoreTestRoute, testTimeFwd,
289293
testTime,
290-
newPaymentFailure(
294+
fn.Some(newPaymentFailure(
291295
&failureSourceIdx,
292296
failureDetails,
293-
),
297+
)),
294298
)
295299
store.AddResult(result)
296300
}
@@ -305,10 +309,10 @@ func BenchmarkMissionControlStoreFlushing(b *testing.B) {
305309
results[i] = newPaymentResult(
306310
0, mcStoreTestRoute, testTimeFwd,
307311
testTime,
308-
newPaymentFailure(
312+
fn.Some(newPaymentFailure(
309313
&failureSourceIdx,
310314
failureDetails,
311-
),
315+
)),
312316
)
313317
}
314318

routing/result_interpretation_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -732,7 +732,7 @@ func TestResultInterpretation(t *testing.T) {
732732
t.Run(testCase.name, func(t *testing.T) {
733733
var failure fn.Option[paymentFailure]
734734
if !testCase.success {
735-
failure = fn.Some(*newPaymentFailure(
735+
failure = fn.Some(newPaymentFailure(
736736
&testCase.failureSrcIdx,
737737
testCase.failure,
738738
))

0 commit comments

Comments
 (0)