From 07e9adfd8c0045ba6350b9b6bca1edf668e84eb4 Mon Sep 17 00:00:00 2001 From: yyforyongyu Date: Mon, 16 May 2022 07:08:58 +0800 Subject: [PATCH] routerrpc+cmd: use `skip_temp_err` when sending to route --- cmd/lncli/cmd_payments.go | 8 ++++++++ lnrpc/routerrpc/router_server.go | 8 +++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/cmd/lncli/cmd_payments.go b/cmd/lncli/cmd_payments.go index e676784dc..39ffb74ff 100644 --- a/cmd/lncli/cmd_payments.go +++ b/cmd/lncli/cmd_payments.go @@ -873,6 +873,13 @@ var sendToRouteCommand = cli.Command{ Usage: "a json array string in the format of the response " + "of queryroutes that denotes which routes to use", }, + cli.BoolFlag{ + Name: "skip_temp_err", + Usage: "Whether the payment should be marked as " + + "failed when a temporary error occurred. Set " + + "it to true so the payment won't be failed " + + "unless a terminal error has occurred.", + }, }, Action: sendToRoute, } @@ -966,6 +973,7 @@ func sendToRoute(ctx *cli.Context) error { req := &routerrpc.SendToRouteRequest{ PaymentHash: rHash, Route: route, + SkipTempErr: ctx.Bool("skip_temp_err"), } return sendToRouteRequest(ctx, req) diff --git a/lnrpc/routerrpc/router_server.go b/lnrpc/routerrpc/router_server.go index 3d5a7e8f4..08d00e9b8 100644 --- a/lnrpc/routerrpc/router_server.go +++ b/lnrpc/routerrpc/router_server.go @@ -399,13 +399,19 @@ func (s *Server) SendToRouteV2(ctx context.Context, return nil, err } + var attempt *channeldb.HTLCAttempt + // Pass route to the router. This call returns the full htlc attempt // information as it is stored in the database. It is possible that both // the attempt return value and err are non-nil. This can happen when // the attempt was already initiated before the error happened. In that // case, we give precedence to the attempt information as stored in the // db. - attempt, err := s.cfg.Router.SendToRoute(hash, route) + if req.SkipTempErr { + attempt, err = s.cfg.Router.SendToRouteSkipTempErr(hash, route) + } else { + attempt, err = s.cfg.Router.SendToRoute(hash, route) + } if attempt != nil { rpcAttempt, err := s.cfg.RouterBackend.MarshalHTLCAttempt( *attempt,