Skip to content

Commit 9fa7ef2

Browse files
committed
routing: remove paymentResult pointer
This is done to unambiguously let newPaymentFailure construct a concrete payment failure. newPaymentResult is update to give it an optional payment failure that can distinguis the success and failure cases.
1 parent f6f81be commit 9fa7ef2

File tree

5 files changed

+40
-32
lines changed

5 files changed

+40
-32
lines changed

channeldb/migration32/migration_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ var (
208208
),
209209
failure: tlv.SomeRecordT(
210210
tlv.NewRecordT[tlv.TlvType3](
211-
*newPaymentFailure(
211+
newPaymentFailure(
212212
&failureIndex,
213213
&lnwire.FailFeeInsufficient{},
214214
),
@@ -255,7 +255,7 @@ var (
255255
),
256256
failure: tlv.SomeRecordT(
257257
tlv.NewRecordT[tlv.TlvType3](
258-
*newPaymentFailure(
258+
newPaymentFailure(
259259
&failureIndex, nil,
260260
),
261261
),

channeldb/migration32/mission_control_store.go

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,12 @@ func deserializeOldResult(k, v []byte) (*paymentResultOld, error) {
9393

9494
// convertPaymentResult converts a paymentResultOld to a paymentResultNew.
9595
func convertPaymentResult(old *paymentResultOld) *paymentResultNew {
96-
var failure *paymentFailure
96+
var failure fn.Option[paymentFailure]
9797
if !old.success {
98-
failure = newPaymentFailure(old.failureSourceIdx, old.failure)
98+
failure = fn.Some(newPaymentFailure(
99+
old.failureSourceIdx,
100+
old.failure,
101+
))
99102
}
100103

101104
return newPaymentResult(
@@ -106,7 +109,7 @@ func convertPaymentResult(old *paymentResultOld) *paymentResultNew {
106109

107110
// newPaymentResult constructs a new paymentResult.
108111
func newPaymentResult(id uint64, rt *mcRoute, timeFwd, timeReply time.Time,
109-
failure *paymentFailure) *paymentResultNew {
112+
failure fn.Option[paymentFailure]) *paymentResultNew {
110113

111114
result := &paymentResultNew{
112115
id: id,
@@ -119,11 +122,11 @@ func newPaymentResult(id uint64, rt *mcRoute, timeFwd, timeReply time.Time,
119122
route: tlv.NewRecordT[tlv.TlvType2](*rt),
120123
}
121124

122-
if failure != nil {
125+
failure.WhenSome(func(f paymentFailure) {
123126
result.failure = tlv.SomeRecordT(
124-
tlv.NewRecordT[tlv.TlvType3](*failure),
127+
tlv.NewRecordT[tlv.TlvType3](f),
125128
)
126-
}
129+
})
127130

128131
return result
129132
}
@@ -153,10 +156,10 @@ type paymentFailure struct {
153156
// failure with unknown details. Otherwise, the index and failure message are
154157
// used to populate the info field of the paymentFailure.
155158
func newPaymentFailure(sourceIdx *int,
156-
failureMsg lnwire.FailureMessage) *paymentFailure {
159+
failureMsg lnwire.FailureMessage) paymentFailure {
157160

158161
if sourceIdx == nil {
159-
return &paymentFailure{}
162+
return paymentFailure{}
160163
}
161164

162165
info := paymentFailureInfo{
@@ -166,7 +169,7 @@ func newPaymentFailure(sourceIdx *int,
166169
msg: tlv.NewRecordT[tlv.TlvType1](failureMessage{failureMsg}),
167170
}
168171

169-
return &paymentFailure{
172+
return paymentFailure{
170173
info: tlv.SomeRecordT(tlv.NewRecordT[tlv.TlvType0](info)),
171174
}
172175
}

routing/missioncontrol.go

Lines changed: 10 additions & 9 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,11 @@ func newPaymentResult(id uint64, rt *mcRoute, timeFwd, timeReply time.Time,
289289
route: tlv.NewRecordT[tlv.TlvType2](*rt),
290290
}
291291

292-
if failure != nil {
292+
failure.WhenSome(func(f paymentFailure) {
293293
result.failure = tlv.SomeRecordT(
294-
tlv.NewRecordT[tlv.TlvType3](*failure),
294+
tlv.NewRecordT[tlv.TlvType3](f),
295295
)
296-
}
296+
})
297297

298298
return result
299299
}
@@ -621,7 +621,7 @@ func (m *MissionControl) ReportPaymentFail(paymentID uint64, rt *route.Route,
621621

622622
result := newPaymentResult(
623623
paymentID, extractMCRoute(rt), timestamp, timestamp,
624-
newPaymentFailure(failureSourceIdx, failure),
624+
fn.Some(newPaymentFailure(failureSourceIdx, failure)),
625625
)
626626

627627
return m.processPaymentResult(result)
@@ -635,7 +635,8 @@ func (m *MissionControl) ReportPaymentSuccess(paymentID uint64,
635635
timestamp := m.cfg.clock.Now()
636636

637637
result := newPaymentResult(
638-
paymentID, extractMCRoute(rt), timestamp, timestamp, nil,
638+
paymentID, extractMCRoute(rt), timestamp, timestamp,
639+
fn.None[paymentFailure](),
639640
)
640641

641642
_, err := m.processPaymentResult(result)
@@ -838,10 +839,10 @@ type paymentFailure struct {
838839
// failure with unknown details. Otherwise, the index and failure message are
839840
// used to populate the info field of the paymentFailure.
840841
func newPaymentFailure(sourceIdx *int,
841-
failureMsg lnwire.FailureMessage) *paymentFailure {
842+
failureMsg lnwire.FailureMessage) paymentFailure {
842843

843844
if sourceIdx == nil {
844-
return &paymentFailure{}
845+
return paymentFailure{}
845846
}
846847

847848
info := paymentFailureInfo{
@@ -851,7 +852,7 @@ func newPaymentFailure(sourceIdx *int,
851852
msg: tlv.NewRecordT[tlv.TlvType1](failureMessage{failureMsg}),
852853
}
853854

854-
return &paymentFailure{
855+
return paymentFailure{
855856
info: tlv.SomeRecordT(tlv.NewRecordT[tlv.TlvType0](info)),
856857
}
857858
}

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)