multi: thread context through SendPayment
This commit is contained in:
3 files changed
+34
-16
No files matched your search
+3
-3
@@ -896,8 +896,8 @@ func (l *LightningPayment) Identifier() [32]byte {
|
|||||||
// will be returned which describes the path the successful payment traversed
|
// will be returned which describes the path the successful payment traversed
|
||||||
// within the network to reach the destination. Additionally, the payment
|
// within the network to reach the destination. Additionally, the payment
|
||||||
// preimage will also be returned.
|
// preimage will also be returned.
|
||||||
func (r *ChannelRouter) SendPayment(payment *LightningPayment) ([32]byte,
|
func (r *ChannelRouter) SendPayment(ctx context.Context,
|
||||||
*route.Route, error) {
|
payment *LightningPayment) ([32]byte, *route.Route, error) {
|
||||||
|
|
||||||
paySession, shardTracker, err := r.PreparePayment(payment)
|
paySession, shardTracker, err := r.PreparePayment(payment)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -908,7 +908,7 @@ func (r *ChannelRouter) SendPayment(payment *LightningPayment) ([32]byte,
|
|||||||
spewPayment(payment))
|
spewPayment(payment))
|
||||||
|
|
||||||
return r.sendPayment(
|
return r.sendPayment(
|
||||||
context.Background(), payment.FeeLimit, payment.Identifier(),
|
ctx, payment.FeeLimit, payment.Identifier(),
|
||||||
payment.PayAttemptTimeout, paySession, shardTracker,
|
payment.PayAttemptTimeout, paySession, shardTracker,
|
||||||
payment.FirstHopCustomRecords,
|
payment.FirstHopCustomRecords,
|
||||||
)
|
)
|
||||||
|
|||||||
+30
-12
@@ -328,7 +328,9 @@ func TestSendPaymentRouteFailureFallback(t *testing.T) {
|
|||||||
|
|
||||||
// Send off the payment request to the router, route through pham nuwen
|
// Send off the payment request to the router, route through pham nuwen
|
||||||
// should've been selected as a fall back and succeeded correctly.
|
// should've been selected as a fall back and succeeded correctly.
|
||||||
paymentPreImage, route, err := ctx.router.SendPayment(payment)
|
paymentPreImage, route, err := ctx.router.SendPayment(
|
||||||
|
t.Context(), payment,
|
||||||
|
)
|
||||||
require.NoErrorf(t, err, "unable to send payment: %v",
|
require.NoErrorf(t, err, "unable to send payment: %v",
|
||||||
payment.paymentHash)
|
payment.paymentHash)
|
||||||
|
|
||||||
@@ -407,7 +409,9 @@ func TestSendPaymentRouteInfiniteLoopWithBadHopHint(t *testing.T) {
|
|||||||
|
|
||||||
// Send off the payment request to the router, should succeed
|
// Send off the payment request to the router, should succeed
|
||||||
// ignoring the bad channel id hint.
|
// ignoring the bad channel id hint.
|
||||||
paymentPreImage, route, paymentErr := ctx.router.SendPayment(payment)
|
paymentPreImage, route, paymentErr := ctx.router.SendPayment(
|
||||||
|
t.Context(), payment,
|
||||||
|
)
|
||||||
require.NoErrorf(t, paymentErr, "unable to send payment: %v",
|
require.NoErrorf(t, paymentErr, "unable to send payment: %v",
|
||||||
payment.paymentHash)
|
payment.paymentHash)
|
||||||
|
|
||||||
@@ -638,7 +642,9 @@ func TestSendPaymentErrorRepeatedFeeInsufficient(t *testing.T) {
|
|||||||
|
|
||||||
// Send off the payment request to the router, route through phamnuwen
|
// Send off the payment request to the router, route through phamnuwen
|
||||||
// should've been selected as a fall back and succeeded correctly.
|
// should've been selected as a fall back and succeeded correctly.
|
||||||
paymentPreImage, route, err := ctx.router.SendPayment(payment)
|
paymentPreImage, route, err := ctx.router.SendPayment(
|
||||||
|
t.Context(), payment,
|
||||||
|
)
|
||||||
require.NoErrorf(t, err, "unable to send payment: %v",
|
require.NoErrorf(t, err, "unable to send payment: %v",
|
||||||
payment.paymentHash)
|
payment.paymentHash)
|
||||||
|
|
||||||
@@ -745,7 +751,9 @@ func TestSendPaymentErrorFeeInsufficientPrivateEdge(t *testing.T) {
|
|||||||
|
|
||||||
// Send off the payment request to the router, route through son
|
// Send off the payment request to the router, route through son
|
||||||
// goku and then across the private channel to elst.
|
// goku and then across the private channel to elst.
|
||||||
paymentPreImage, route, err := ctx.router.SendPayment(payment)
|
paymentPreImage, route, err := ctx.router.SendPayment(
|
||||||
|
t.Context(), payment,
|
||||||
|
)
|
||||||
require.NoErrorf(t, err, "unable to send payment: %v",
|
require.NoErrorf(t, err, "unable to send payment: %v",
|
||||||
payment.paymentHash)
|
payment.paymentHash)
|
||||||
|
|
||||||
@@ -871,7 +879,9 @@ func TestSendPaymentPrivateEdgeUpdateFeeExceedsLimit(t *testing.T) {
|
|||||||
|
|
||||||
// Send off the payment request to the router, route through son
|
// Send off the payment request to the router, route through son
|
||||||
// goku and then across the private channel to elst.
|
// goku and then across the private channel to elst.
|
||||||
paymentPreImage, route, err := ctx.router.SendPayment(payment)
|
paymentPreImage, route, err := ctx.router.SendPayment(
|
||||||
|
t.Context(), payment,
|
||||||
|
)
|
||||||
require.NoErrorf(t, err, "unable to send payment: %v",
|
require.NoErrorf(t, err, "unable to send payment: %v",
|
||||||
payment.paymentHash)
|
payment.paymentHash)
|
||||||
|
|
||||||
@@ -994,7 +1004,9 @@ func TestSendPaymentErrorNonFinalTimeLockErrors(t *testing.T) {
|
|||||||
// Send off the payment request to the router, this payment should
|
// Send off the payment request to the router, this payment should
|
||||||
// succeed as we should actually go through Pham Nuwen in order to get
|
// succeed as we should actually go through Pham Nuwen in order to get
|
||||||
// to Sophon, even though he has higher fees.
|
// to Sophon, even though he has higher fees.
|
||||||
paymentPreImage, rt, err := ctx.router.SendPayment(payment)
|
paymentPreImage, rt, err := ctx.router.SendPayment(
|
||||||
|
t.Context(), payment,
|
||||||
|
)
|
||||||
require.NoErrorf(t, err, "unable to send payment: %v",
|
require.NoErrorf(t, err, "unable to send payment: %v",
|
||||||
payment.paymentHash)
|
payment.paymentHash)
|
||||||
|
|
||||||
@@ -1020,7 +1032,9 @@ func TestSendPaymentErrorNonFinalTimeLockErrors(t *testing.T) {
|
|||||||
// w.r.t to the block height, and instead go through Pham Nuwen. We
|
// w.r.t to the block height, and instead go through Pham Nuwen. We
|
||||||
// flip a bit in the payment hash to allow resending this payment.
|
// flip a bit in the payment hash to allow resending this payment.
|
||||||
payment.paymentHash[1] ^= 1
|
payment.paymentHash[1] ^= 1
|
||||||
paymentPreImage, rt, err = ctx.router.SendPayment(payment)
|
paymentPreImage, rt, err = ctx.router.SendPayment(
|
||||||
|
t.Context(), payment,
|
||||||
|
)
|
||||||
require.NoErrorf(t, err, "unable to send payment: %v",
|
require.NoErrorf(t, err, "unable to send payment: %v",
|
||||||
payment.paymentHash)
|
payment.paymentHash)
|
||||||
|
|
||||||
@@ -1089,7 +1103,7 @@ func TestSendPaymentErrorPathPruning(t *testing.T) {
|
|||||||
|
|
||||||
// When we try to dispatch that payment, we should receive an error as
|
// When we try to dispatch that payment, we should receive an error as
|
||||||
// both attempts should fail and cause both routes to be pruned.
|
// both attempts should fail and cause both routes to be pruned.
|
||||||
_, _, err = ctx.router.SendPayment(payment)
|
_, _, err = ctx.router.SendPayment(t.Context(), payment)
|
||||||
require.Error(t, err, "payment didn't return error")
|
require.Error(t, err, "payment didn't return error")
|
||||||
|
|
||||||
// The final error returned should also indicate that the peer wasn't
|
// The final error returned should also indicate that the peer wasn't
|
||||||
@@ -1134,7 +1148,9 @@ func TestSendPaymentErrorPathPruning(t *testing.T) {
|
|||||||
// This shouldn't return an error, as we'll make a payment attempt via
|
// This shouldn't return an error, as we'll make a payment attempt via
|
||||||
// the pham nuwen channel based on the assumption that there might be an
|
// the pham nuwen channel based on the assumption that there might be an
|
||||||
// intermittent issue with the songoku <-> sophon channel.
|
// intermittent issue with the songoku <-> sophon channel.
|
||||||
paymentPreImage, rt, err := ctx.router.SendPayment(payment)
|
paymentPreImage, rt, err := ctx.router.SendPayment(
|
||||||
|
t.Context(), payment,
|
||||||
|
)
|
||||||
require.NoErrorf(t, err, "unable to send payment: %v",
|
require.NoErrorf(t, err, "unable to send payment: %v",
|
||||||
payment.paymentHash)
|
payment.paymentHash)
|
||||||
|
|
||||||
@@ -1174,7 +1190,9 @@ func TestSendPaymentErrorPathPruning(t *testing.T) {
|
|||||||
|
|
||||||
// We flip a bit in the payment hash to allow resending this payment.
|
// We flip a bit in the payment hash to allow resending this payment.
|
||||||
payment.paymentHash[1] ^= 1
|
payment.paymentHash[1] ^= 1
|
||||||
paymentPreImage, rt, err = ctx.router.SendPayment(payment)
|
paymentPreImage, rt, err = ctx.router.SendPayment(
|
||||||
|
t.Context(), payment,
|
||||||
|
)
|
||||||
require.NoErrorf(t, err, "unable to send payment: %v",
|
require.NoErrorf(t, err, "unable to send payment: %v",
|
||||||
payment.paymentHash)
|
payment.paymentHash)
|
||||||
|
|
||||||
@@ -1306,7 +1324,7 @@ func TestUnknownErrorSource(t *testing.T) {
|
|||||||
// the route a->b->c is tried first. An unreadable faiure is returned
|
// the route a->b->c is tried first. An unreadable faiure is returned
|
||||||
// which should pruning the channel a->b. We expect the payment to
|
// which should pruning the channel a->b. We expect the payment to
|
||||||
// succeed via a->d.
|
// succeed via a->d.
|
||||||
_, _, err = ctx.router.SendPayment(payment)
|
_, _, err = ctx.router.SendPayment(t.Context(), payment)
|
||||||
require.NoErrorf(t, err, "unable to send payment: %v",
|
require.NoErrorf(t, err, "unable to send payment: %v",
|
||||||
payment.paymentHash)
|
payment.paymentHash)
|
||||||
|
|
||||||
@@ -1331,7 +1349,7 @@ func TestUnknownErrorSource(t *testing.T) {
|
|||||||
// Send off the payment request to the router. We expect the payment to
|
// Send off the payment request to the router. We expect the payment to
|
||||||
// fail because both routes have been pruned.
|
// fail because both routes have been pruned.
|
||||||
payment.paymentHash[1] ^= 1
|
payment.paymentHash[1] ^= 1
|
||||||
_, _, err = ctx.router.SendPayment(payment)
|
_, _, err = ctx.router.SendPayment(t.Context(), payment)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Fatalf("expected payment to fail")
|
t.Fatalf("expected payment to fail")
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -6022,7 +6022,7 @@ func (r *rpcServer) dispatchPaymentIntent(ctx context.Context,
|
|||||||
}
|
}
|
||||||
|
|
||||||
preImage, route, routerErr = r.server.chanRouter.SendPayment(
|
preImage, route, routerErr = r.server.chanRouter.SendPayment(
|
||||||
payment,
|
ctx, payment,
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
var attempt *paymentsdb.HTLCAttempt
|
var attempt *paymentsdb.HTLCAttempt
|
||||||
|
|||||||
Reference in new issue
Block a user