Explicitly log a warning when a payment failed on the first hop 2022-04-log-scoring
authorMatt Corallo <git@bluematt.me>
Sun, 3 Apr 2022 17:11:37 +0000 (17:11 +0000)
committerMatt Corallo <git@bluematt.me>
Wed, 27 Apr 2022 00:42:08 +0000 (00:42 +0000)
lightning/src/routing/scoring.rs

index e0f9189bf35e066aa551f2b94190a01ad20707eb..0e04c63903392b8ccfc36d72c3fa87109b86c17b 100644 (file)
@@ -858,12 +858,16 @@ impl<G: Deref<Target = NetworkGraph>, L: Deref, T: Time> Score for Probabilistic
                let liquidity_offset_half_life = self.params.liquidity_offset_half_life;
                log_trace!(self.logger, "Scoring path through to SCID {} as having failed at {} msat", short_channel_id, amount_msat);
                let network_graph = self.network_graph.read_only();
-               for hop in path {
+               for (hop_idx, hop) in path.iter().enumerate() {
                        let target = NodeId::from_pubkey(&hop.pubkey);
                        let channel_directed_from_source = network_graph.channels()
                                .get(&hop.short_channel_id)
                                .and_then(|channel| channel.as_directed_to(&target));
 
+                       if hop.short_channel_id == short_channel_id && hop_idx == 0 {
+                               log_warn!(self.logger, "Payment failed at the first hop - we do not attempt to learn channel info in such cases as we can directly observe local state.\n\tBecause we know the local state, we should generally not see failures here - this may be an indication that your channel peer on channel {} is broken and you may wish to close the channel.", hop.short_channel_id);
+                       }
+
                        // Only score announced channels.
                        if let Some((channel, source)) = channel_directed_from_source {
                                let capacity_msat = channel.effective_capacity().as_msat();