routing: map insufficient local bandwidth error to no path
With mpp it isn't possible anymore for findPath to determine that there isn't enough local bandwidth. The full payment amount isn't known at that point. In a follow-up, this payment outcome can be reintroduced on a higher level (payment lifecycle).
This commit is contained in:
parent
3ad7ab223e
commit
cb4cd49dc8
@ -116,6 +116,9 @@ const (
|
|||||||
|
|
||||||
// FailureReasonInsufficientBalance indicates that we didn't have enough
|
// FailureReasonInsufficientBalance indicates that we didn't have enough
|
||||||
// balance to complete the payment.
|
// balance to complete the payment.
|
||||||
|
//
|
||||||
|
// This reason isn't assigned anymore, but may still exist for older
|
||||||
|
// payments.
|
||||||
FailureReasonInsufficientBalance FailureReason = 4
|
FailureReasonInsufficientBalance FailureReason = 4
|
||||||
|
|
||||||
// TODO(halseth): cancel state.
|
// TODO(halseth): cancel state.
|
||||||
|
@ -478,7 +478,7 @@ func findPathInternal(
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if max < amt {
|
if max < amt {
|
||||||
return nil, errInsufficientBalance
|
return nil, errNoPathFound
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2809,37 +2809,6 @@ func TestRouteToSelf(t *testing.T) {
|
|||||||
ctx.assertPath(path, []uint64{1, 3, 2})
|
ctx.assertPath(path, []uint64{1, 3, 2})
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestInsufficientBalance tests that a dedicated error is returned for
|
|
||||||
// insufficient local balance.
|
|
||||||
func TestInsufficientBalance(t *testing.T) {
|
|
||||||
t.Parallel()
|
|
||||||
|
|
||||||
testChannels := []*testChannel{
|
|
||||||
symmetricTestChannel("source", "target", 100000, &testChannelPolicy{
|
|
||||||
Expiry: 144,
|
|
||||||
FeeBaseMsat: 500,
|
|
||||||
}, 1),
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx := newPathFindingTestContext(t, testChannels, "source")
|
|
||||||
defer ctx.cleanup()
|
|
||||||
|
|
||||||
paymentAmt := lnwire.NewMSatFromSatoshis(100)
|
|
||||||
target := ctx.keyFromAlias("target")
|
|
||||||
|
|
||||||
ctx.graphParams.bandwidthHints = map[uint64]lnwire.MilliSatoshi{
|
|
||||||
1: lnwire.NewMSatFromSatoshis(50),
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find the best path to self. We expect this to be source->a->source,
|
|
||||||
// because a charges the lowest forwarding fee.
|
|
||||||
_, err := ctx.findPath(target, paymentAmt)
|
|
||||||
if err != errInsufficientBalance {
|
|
||||||
t.Fatalf("expected insufficient balance error, but got: %v",
|
|
||||||
err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type pathFindingTestContext struct {
|
type pathFindingTestContext struct {
|
||||||
t *testing.T
|
t *testing.T
|
||||||
graphParams graphParams
|
graphParams graphParams
|
||||||
|
@ -26,10 +26,6 @@ const (
|
|||||||
// not exist in the graph.
|
// not exist in the graph.
|
||||||
errNoPathFound
|
errNoPathFound
|
||||||
|
|
||||||
// errInsufficientLocalBalance is returned when none of the local
|
|
||||||
// channels have enough balance for the payment.
|
|
||||||
errInsufficientBalance
|
|
||||||
|
|
||||||
// errEmptyPaySession is returned when the empty payment session is
|
// errEmptyPaySession is returned when the empty payment session is
|
||||||
// queried for a route.
|
// queried for a route.
|
||||||
errEmptyPaySession
|
errEmptyPaySession
|
||||||
@ -50,9 +46,6 @@ func (e noRouteError) Error() string {
|
|||||||
case errEmptyPaySession:
|
case errEmptyPaySession:
|
||||||
return "empty payment session"
|
return "empty payment session"
|
||||||
|
|
||||||
case errInsufficientBalance:
|
|
||||||
return "insufficient local balance"
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return "unknown no-route error"
|
return "unknown no-route error"
|
||||||
}
|
}
|
||||||
@ -69,9 +62,6 @@ func (e noRouteError) FailureReason() channeldb.FailureReason {
|
|||||||
|
|
||||||
return channeldb.FailureReasonNoRoute
|
return channeldb.FailureReasonNoRoute
|
||||||
|
|
||||||
case errInsufficientBalance:
|
|
||||||
return channeldb.FailureReasonInsufficientBalance
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return channeldb.FailureReasonError
|
return channeldb.FailureReasonError
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user