@@ -78,7 +78,7 @@ struct payment {
7878	struct  amount_msat  maxfee ;
7979	/* Maximum delay on the route we're ok with */ 
8080	u32  maxdelay ;
81- 	/* Maximum  number of payment routes that can be pending. */ 
81+ 	/* If non-zero: maximum  number of payment routes that can be pending. */ 
8282	u32  maxparts ;
8383	/* Do we have to do it all in a single part? */ 
8484	bool  disable_mpp ;
@@ -172,7 +172,6 @@ static struct command_result *xpay_core(struct command *cmd,
172172					u32  retryfor ,
173173					const  struct  amount_msat  * partial ,
174174					u32  maxdelay ,
175- 					u32  dev_maxparts ,
176175					bool  as_pay );
177176
178177/* Wrapper for pending commands (ignores return) */ 
@@ -1287,6 +1286,16 @@ static struct command_result *getroutes_done_err(struct command *aux_cmd,
12871286	msg  =  json_strdup (tmpctx , buf , json_get_member (buf , error , "message" ));
12881287	json_to_int (buf , json_get_member (buf , error , "code" ), & code );
12891288
1289+ 	/* If we were restricting the number of parts, we remove that 
1290+ 	 * restriction and try again. */ 
1291+ 	if  (payment -> maxparts ) {
1292+ 		payment_log (payment , LOG_INFORM ,
1293+ 			    "getroute failed with maxparts=%u, so retrying without that restriction" ,
1294+ 			    payment -> maxparts );
1295+ 		payment -> maxparts  =  0 ;
1296+ 		return  getroutes_for (aux_cmd , payment , payment -> amount_being_routed );
1297+ 	}
1298+ 
12901299	/* Simple case: failed immediately. */ 
12911300	if  (payment -> total_num_attempts  ==  0 ) {
12921301		payment_give_up (aux_cmd , payment , code , "Failed: %s" , msg );
@@ -1319,7 +1328,6 @@ static struct command_result *getroutes_for(struct command *aux_cmd,
13191328	struct  out_req  * req ;
13201329	const  struct  pubkey  * dst ;
13211330	struct  amount_msat  maxfee ;
1322- 	size_t  count_pending ;
13231331
13241332	/* I would normally assert here, but we have reports of this happening... */ 
13251333	if  (amount_msat_is_zero (deliver )) {
@@ -1380,9 +1388,11 @@ static struct command_result *getroutes_for(struct command *aux_cmd,
13801388	json_add_amount_msat (req -> js , "maxfee_msat" , maxfee );
13811389	json_add_u32 (req -> js , "final_cltv" , payment -> final_cltv );
13821390	json_add_u32 (req -> js , "maxdelay" , payment -> maxdelay );
1383- 	count_pending  =  count_current_attempts (payment );
1384- 	assert (payment -> maxparts  >  count_pending );
1385- 	json_add_u32 (req -> js , "maxparts" , payment -> maxparts  -  count_pending );
1391+ 	if  (payment -> maxparts ) {
1392+ 		size_t  count_pending  =  count_current_attempts (payment );
1393+ 		assert (payment -> maxparts  >  count_pending );
1394+ 		json_add_u32 (req -> js , "maxparts" , payment -> maxparts  -  count_pending );
1395+ 	}
13861396
13871397	return  send_payment_req (aux_cmd , payment , req );
13881398}
@@ -1693,7 +1703,7 @@ struct xpay_params {
16931703	struct  amount_msat  * msat , * maxfee , * partial ;
16941704	const  char  * * layers ;
16951705	unsigned int   retryfor ;
1696- 	u32  maxdelay ,  dev_maxparts ;
1706+ 	u32  maxdelay ;
16971707	const  char  * bip353 ;
16981708};
16991709
@@ -1710,7 +1720,7 @@ invoice_fetched(struct command *cmd,
17101720	return  xpay_core (cmd , take (to_canonical_invstr (NULL , take (inv ))),
17111721			 NULL , params -> maxfee , params -> layers ,
17121722			 params -> retryfor , params -> partial , params -> maxdelay ,
1713- 			 params -> dev_maxparts ,  false);
1723+ 			 false);
17141724}
17151725
17161726static  struct  command_result  * 
@@ -1771,7 +1781,7 @@ static struct command_result *json_xpay_params(struct command *cmd,
17711781	struct  amount_msat  * msat , * maxfee , * partial ;
17721782	const  char  * invstring ;
17731783	const  char  * * layers ;
1774- 	u32  * maxdelay ,  * maxparts ;
1784+ 	u32  * maxdelay ;
17751785	unsigned int   * retryfor ;
17761786	struct  out_req  * req ;
17771787	struct  xpay_params  * xparams ;
@@ -1784,14 +1794,9 @@ static struct command_result *json_xpay_params(struct command *cmd,
17841794			 p_opt_def ("retry_for" , param_number , & retryfor , 60 ),
17851795			 p_opt ("partial_msat" , param_msat , & partial ),
17861796			 p_opt_def ("maxdelay" , param_u32 , & maxdelay , 2016 ),
1787- 			 p_opt_dev ("dev_maxparts" , param_u32 , & maxparts , 100 ),
17881797			 NULL ))
17891798		return  command_param_failed ();
17901799
1791- 	if  (* maxparts  ==  0 )
1792- 		return  command_fail (cmd , JSONRPC2_INVALID_PARAMS ,
1793- 				    "maxparts cannot be zero" );
1794- 
17951800	/* Is this a one-shot vibe payment?  Kids these days! */ 
17961801	if  (!as_pay  &&  bolt12_has_offer_prefix (invstring )) {
17971802		struct  command_result  * ret ;
@@ -1810,7 +1815,6 @@ static struct command_result *json_xpay_params(struct command *cmd,
18101815		xparams -> layers  =  layers ;
18111816		xparams -> retryfor  =  * retryfor ;
18121817		xparams -> maxdelay  =  * maxdelay ;
1813- 		xparams -> dev_maxparts  =  * maxparts ;
18141818		xparams -> bip353  =  NULL ;
18151819
18161820		return  do_fetchinvoice (cmd , invstring , xparams );
@@ -1825,7 +1829,6 @@ static struct command_result *json_xpay_params(struct command *cmd,
18251829		xparams -> layers  =  layers ;
18261830		xparams -> retryfor  =  * retryfor ;
18271831		xparams -> maxdelay  =  * maxdelay ;
1828- 		xparams -> dev_maxparts  =  * maxparts ;
18291832		xparams -> bip353  =  invstring ;
18301833
18311834		req  =  jsonrpc_request_start (cmd , "fetchbip353" ,
@@ -1836,7 +1839,7 @@ static struct command_result *json_xpay_params(struct command *cmd,
18361839	}
18371840
18381841	return  xpay_core (cmd , invstring ,
1839- 			 msat , maxfee , layers , * retryfor , partial , * maxdelay ,  * maxparts , 
1842+ 			 msat , maxfee , layers , * retryfor , partial , * maxdelay ,
18401843			 as_pay );
18411844}
18421845
@@ -1848,11 +1851,12 @@ static struct command_result *xpay_core(struct command *cmd,
18481851					u32  retryfor ,
18491852					const  struct  amount_msat  * partial ,
18501853					u32  maxdelay ,
1851- 					u32  dev_maxparts ,
18521854					bool  as_pay )
18531855{
18541856	struct  payment  * payment  =  tal (cmd , struct  payment );
18551857	struct  xpay  * xpay  =  xpay_of (cmd -> plugin );
1858+ 	struct  gossmap  * gossmap  =  get_gossmap (xpay );
1859+ 	struct  node_id  dstid ;
18561860	u64  now , invexpiry ;
18571861	struct  out_req  * req ;
18581862	char  * err ;
@@ -1875,10 +1879,8 @@ static struct command_result *xpay_core(struct command *cmd,
18751879	else 
18761880		payment -> layers  =  NULL ;
18771881	payment -> maxdelay  =  maxdelay ;
1878- 	payment -> maxparts  =  dev_maxparts ;
18791882
18801883	if  (bolt12_has_prefix (payment -> invstring )) {
1881- 		struct  gossmap  * gossmap  =  get_gossmap (xpay );
18821884		struct  tlv_invoice  * b12inv 
18831885			=  invoice_decode (tmpctx , payment -> invstring ,
18841886					 strlen (payment -> invstring ),
@@ -2004,6 +2006,15 @@ static struct command_result *xpay_core(struct command *cmd,
20042006	} else 
20052007		payment -> maxfee  =  * maxfee ;
20062008
2009+ 	/* If we are using an unannounced channel, we assume we can 
2010+ 	 * only do 6 HTLCs at a time.  This is currently true for 
2011+ 	 * Phoenix, which is a large and significant node. */ 
2012+ 	node_id_from_pubkey (& dstid , & payment -> destination );
2013+ 	if  (!gossmap_find_node (gossmap , & dstid ))
2014+ 		payment -> maxparts  =  6 ;
2015+ 	else 
2016+ 		payment -> maxparts  =  0 ;
2017+ 
20072018	/* Now preapprove, then start payment. */ 
20082019	if  (command_check_only (cmd )) {
20092020		req  =  jsonrpc_request_start (cmd , "check" ,
0 commit comments