]> git.bitcoin.ninja Git - rust-lightning/commitdiff
Take in-flight HTLCs by reference in Router::find_route
authorValentine Wallace <vwallace@protonmail.com>
Mon, 19 Dec 2022 05:26:58 +0000 (00:26 -0500)
committerValentine Wallace <vwallace@protonmail.com>
Thu, 5 Jan 2023 16:24:56 +0000 (11:24 -0500)
Useful in upcoming work when for payment retries.

fuzz/src/chanmon_consistency.rs
fuzz/src/full_stack.rs
lightning-invoice/src/payment.rs
lightning/src/routing/router.rs
lightning/src/util/test_utils.rs

index f2abb61114768acb6c5872b733ae511e56e322cf..e1bf9cb540d370972eab7ea9fc58732ef8f6b833 100644 (file)
@@ -90,7 +90,7 @@ struct FuzzRouter {}
 impl Router for FuzzRouter {
        fn find_route(
                &self, _payer: &PublicKey, _params: &RouteParameters, _first_hops: Option<&[&ChannelDetails]>,
-               _inflight_htlcs: InFlightHtlcs
+               _inflight_htlcs: &InFlightHtlcs
        ) -> Result<Route, msgs::LightningError> {
                Err(msgs::LightningError {
                        err: String::from("Not implemented"),
index 26b17fb7f58d1ab5e06a8f193a5ffeb6546660a2..2d9be101ef89faf2fdd9901292becec1f013e26b 100644 (file)
@@ -132,7 +132,7 @@ struct FuzzRouter {}
 impl Router for FuzzRouter {
        fn find_route(
                &self, _payer: &PublicKey, _params: &RouteParameters, _first_hops: Option<&[&ChannelDetails]>,
-               _inflight_htlcs: InFlightHtlcs
+               _inflight_htlcs: &InFlightHtlcs
        ) -> Result<Route, msgs::LightningError> {
                Err(msgs::LightningError {
                        err: String::from("Not implemented"),
index 03dc9361f7e4fecf827b9878c569bb412a8c163f..9fb472d3b311fbc872bdab4d5c74455a4f4e6857 100644 (file)
@@ -76,7 +76,7 @@
 //! # impl Router for FakeRouter {
 //! #     fn find_route(
 //! #         &self, payer: &PublicKey, params: &RouteParameters,
-//! #         first_hops: Option<&[&ChannelDetails]>, _inflight_htlcs: InFlightHtlcs
+//! #         first_hops: Option<&[&ChannelDetails]>, _inflight_htlcs: &InFlightHtlcs
 //! #     ) -> Result<Route, LightningError> { unimplemented!() }
 //! #     fn notify_payment_path_failed(&self, path: &[&RouteHop], short_channel_id: u64) {  unimplemented!() }
 //! #     fn notify_payment_path_successful(&self, path: &[&RouteHop]) {  unimplemented!() }
@@ -510,7 +510,7 @@ where
                let first_hops = self.payer.first_hops();
                let inflight_htlcs = self.payer.inflight_htlcs();
                let route = self.router.find_route(
-                       &payer, &params, Some(&first_hops.iter().collect::<Vec<_>>()), inflight_htlcs
+                       &payer, &params, Some(&first_hops.iter().collect::<Vec<_>>()), &inflight_htlcs
                ).map_err(|e| PaymentError::Routing(e))?;
 
                match send_payment(&route) {
@@ -578,7 +578,7 @@ where
                let inflight_htlcs = self.payer.inflight_htlcs();
 
                let route = self.router.find_route(
-                       &payer, &params, Some(&first_hops.iter().collect::<Vec<_>>()), inflight_htlcs
+                       &payer, &params, Some(&first_hops.iter().collect::<Vec<_>>()), &inflight_htlcs
                );
 
                if route.is_err() {
@@ -1670,7 +1670,7 @@ mod tests {
        impl Router for TestRouter {
                fn find_route(
                        &self, payer: &PublicKey, route_params: &RouteParameters,
-                       _first_hops: Option<&[&ChannelDetails]>, inflight_htlcs: InFlightHtlcs
+                       _first_hops: Option<&[&ChannelDetails]>, inflight_htlcs: &InFlightHtlcs
                ) -> Result<Route, LightningError> {
                        // Simulate calling the Scorer just as you would in find_route
                        let route = Self::route_for_value(route_params.final_value_msat);
@@ -1723,7 +1723,7 @@ mod tests {
        impl Router for FailingRouter {
                fn find_route(
                        &self, _payer: &PublicKey, _params: &RouteParameters, _first_hops: Option<&[&ChannelDetails]>,
-                       _inflight_htlcs: InFlightHtlcs,
+                       _inflight_htlcs: &InFlightHtlcs,
                ) -> Result<Route, LightningError> {
                        Err(LightningError { err: String::new(), action: ErrorAction::IgnoreError })
                }
@@ -2011,7 +2011,7 @@ mod tests {
        impl Router for ManualRouter {
                fn find_route(
                        &self, _payer: &PublicKey, _params: &RouteParameters, _first_hops: Option<&[&ChannelDetails]>,
-                       _inflight_htlcs: InFlightHtlcs
+                       _inflight_htlcs: &InFlightHtlcs
                ) -> Result<Route, LightningError> {
                        self.0.borrow_mut().pop_front().unwrap()
                }
index 6fc3d4afa7b2c6a2eccf28c93368487a92897791..3f14b0c6a1128a366d8b80c9b59c216febe0b816 100644 (file)
@@ -61,7 +61,7 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, S: Deref> Router for DefaultR
 {
        fn find_route(
                &self, payer: &PublicKey, params: &RouteParameters, first_hops: Option<&[&ChannelDetails]>,
-               inflight_htlcs: InFlightHtlcs
+               inflight_htlcs: &InFlightHtlcs
        ) -> Result<Route, LightningError> {
                let random_seed_bytes = {
                        let mut locked_random_seed_bytes = self.random_seed_bytes.lock().unwrap();
@@ -98,13 +98,13 @@ pub trait Router {
        /// Finds a [`Route`] between `payer` and `payee` for a payment with the given values.
        fn find_route(
                &self, payer: &PublicKey, route_params: &RouteParameters,
-               first_hops: Option<&[&ChannelDetails]>, inflight_htlcs: InFlightHtlcs
+               first_hops: Option<&[&ChannelDetails]>, inflight_htlcs: &InFlightHtlcs
        ) -> Result<Route, LightningError>;
        /// Finds a [`Route`] between `payer` and `payee` for a payment with the given values. Includes
        /// `PaymentHash` and `PaymentId` to be able to correlate the request with a specific payment.
        fn find_route_with_id(
                &self, payer: &PublicKey, route_params: &RouteParameters,
-               first_hops: Option<&[&ChannelDetails]>, inflight_htlcs: InFlightHtlcs,
+               first_hops: Option<&[&ChannelDetails]>, inflight_htlcs: &InFlightHtlcs,
                _payment_hash: PaymentHash, _payment_id: PaymentId
        ) -> Result<Route, LightningError> {
                self.find_route(payer, route_params, first_hops, inflight_htlcs)
@@ -125,15 +125,15 @@ pub trait Router {
 /// [`find_route`].
 ///
 /// [`Score`]: crate::routing::scoring::Score
-pub struct ScorerAccountingForInFlightHtlcs<S: Score> {
+pub struct ScorerAccountingForInFlightHtlcs<'a, S: Score> {
        scorer: S,
        // Maps a channel's short channel id and its direction to the liquidity used up.
-       inflight_htlcs: InFlightHtlcs,
+       inflight_htlcs: &'a InFlightHtlcs,
 }
 
-impl<S: Score> ScorerAccountingForInFlightHtlcs<S> {
+impl<'a, S: Score> ScorerAccountingForInFlightHtlcs<'a, S> {
        /// Initialize a new `ScorerAccountingForInFlightHtlcs`.
-       pub fn new(scorer: S, inflight_htlcs: InFlightHtlcs) -> Self {
+       pub fn new(scorer: S, inflight_htlcs: &'a InFlightHtlcs) -> Self {
                ScorerAccountingForInFlightHtlcs {
                        scorer,
                        inflight_htlcs
@@ -142,11 +142,11 @@ impl<S: Score> ScorerAccountingForInFlightHtlcs<S> {
 }
 
 #[cfg(c_bindings)]
-impl<S: Score> Writeable for ScorerAccountingForInFlightHtlcs<S> {
+impl<'a, S: Score> Writeable for ScorerAccountingForInFlightHtlcs<'a, S> {
        fn write<W: Writer>(&self, writer: &mut W) -> Result<(), io::Error> { self.scorer.write(writer) }
 }
 
-impl<S: Score> Score for ScorerAccountingForInFlightHtlcs<S> {
+impl<'a, S: Score> Score for ScorerAccountingForInFlightHtlcs<'a, S> {
        fn channel_penalty_msat(&self, short_channel_id: u64, source: &NodeId, target: &NodeId, usage: ChannelUsage) -> u64 {
                if let Some(used_liquidity) = self.inflight_htlcs.used_liquidity_msat(
                        source, target, short_channel_id
index 53e8e1d45d0089b13c59067df06eaa430e903058..9ca517964994e5adf01d0fe3784d34ea738847cc 100644 (file)
@@ -86,12 +86,12 @@ impl<'a> TestRouter<'a> {
 impl<'a> Router for TestRouter<'a> {
        fn find_route(
                &self, payer: &PublicKey, params: &RouteParameters, first_hops: Option<&[&channelmanager::ChannelDetails]>,
-               inflight_htlcs: InFlightHtlcs
+               inflight_htlcs: &InFlightHtlcs
        ) -> Result<Route, msgs::LightningError> {
                let logger = TestLogger::new();
                find_route(
                        payer, params, &self.network_graph, first_hops, &logger,
-                       &ScorerAccountingForInFlightHtlcs::new(TestScorer::with_penalty(0), inflight_htlcs),
+                       &ScorerAccountingForInFlightHtlcs::new(TestScorer::with_penalty(0), &inflight_htlcs),
                        &[42; 32]
                )
        }