Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 480
Improve logging of pathfinding behavior#2011
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Uh oh!
There was an error while loading. Please reload this page.
Changes from all commits
9073b8d02dddb40312c2b3cdb8edb6ac4eccfe611a5bd770887eef3fbb6c7f6aef2aa64a2c289a8781ca0e5e8a63240053b9130988d2a85dfe93ed86da0e0678dbb770be98f5c8301239bc34a11969bb77febd5b4364e1834d21dc592f615c633d31File filter
Filter by extension
Conversations
Uh oh!
There was an error while loading. Please reload this page.
Jump to
Uh oh!
There was an error while loading. Please reload this page.
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1296,6 +1296,25 @@ where L::Target: Logger { | ||
| // around again with a higher amount. | ||
| if !contributes_sufficient_value || exceeds_max_path_length || | ||
| exceeds_cltv_delta_limit || payment_failed_on_this_channel { | ||
| let mut is_first_hop = true; | ||
| for (key , _channel) in &first_hop_targets { | ||
| if key == &$dest_node_id { | ||
| if is_first_hop && !contributes_sufficient_value { | ||
| log_trace!(logger, "First Hop {} is excluded due to insufficient value", short_channel_id); | ||
Collaborator There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You can drop the blank lines here, and note that some lines have whitespace at the end, which would be nice to remove. Finally, note that some lines are indented by spaces followed by tabs, which should be replaced by all tabs. All of these issues will be highlighted by doing ContributorAuthor There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thanks | ||
| } if is_first_hop && exceeds_max_path_length { | ||
| log_trace!(logger, "First Hop {} is excluded due to candidate hop excluded max path length", short_channel_id); | ||
| } if is_first_hop && exceeds_cltv_delta_limit { | ||
| log_trace!(logger, "First Hop {} is excluded beacause it exceed the maximum total cltv expiry limit" , short_channel_id); | ||
| } if is_first_hop && payment_failed_on_this_channel { | ||
| log_trace!(logger, "First Hop {} is excluded beacause it was failed previously" , short_channel_id); | ||
| } | ||
| is_first_hop = false; | ||
| } // commit | ||
Collaborator There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What does ContributorAuthor There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Oh, it means nothing. I write | ||
| } | ||
| // Path isn't useful, ignore it and move on. | ||
| } else if may_overpay_to_meet_path_minimum_msat { | ||
| hit_minimum_limit = true; | ||
| @@ -3813,7 +3832,66 @@ mod tests { | ||
| assert_eq!(total_amount_paid_msat, 50_000); | ||
| } | ||
| } | ||
| #[test] | ||
| fn test_my_logging_function() { // commit | ||
| let (secp_ctx, network_graph, gossip_sync, _, logger) = build_graph(); | ||
| let (our_privkey, our_id, privkeys, nodes) = get_nodes(&secp_ctx); | ||
| let scorer = ln_test_utils::TestScorer::with_penalty(0); | ||
| let keys_manager = ln_test_utils::TestKeysInterface::new(&[0u8; 32], Network::Testnet); | ||
| let random_seed_bytes = keys_manager.get_secure_random_bytes(); | ||
| let payment_params = PaymentParameters::from_node_id(nodes[2], 42); | ||
| let logger = crate::util::test_utils::TestLogger::new(); | ||
| update_channel(&gossip_sync, &secp_ctx, &our_privkey, UnsignedChannelUpdate { | ||
| chain_hash: genesis_block(Network::Testnet).header.block_hash(), | ||
| short_channel_id: 1, | ||
| timestamp: 2, | ||
| flags: 0, | ||
| cltv_expiry_delta: 0, | ||
| htlc_minimum_msat: 0, | ||
| htlc_maximum_msat: 100_000, | ||
| fee_base_msat: 1_000_000, | ||
| fee_proportional_millionths: 0, | ||
| excess_data: Vec::new() | ||
| }); | ||
| update_channel(&gossip_sync, &secp_ctx, &privkeys[0], UnsignedChannelUpdate { | ||
| chain_hash: genesis_block(Network::Testnet).header.block_hash(), | ||
| short_channel_id: 3, | ||
| timestamp: 2, | ||
| flags: 0, | ||
| cltv_expiry_delta: 0, | ||
| htlc_minimum_msat: 0, | ||
| htlc_maximum_msat: 50_000, | ||
| fee_base_msat: 0, | ||
| fee_proportional_millionths: 0, | ||
| excess_data: Vec::new() | ||
| }); | ||
| // we can make four test for different condition or all condition in diffrent tests. | ||
| let is_first_hop = true; | ||
| let contributes_sufficient_value = false ; // for contributes_suffiecient value , understand where this value came from. what is contribute_sufficent value. | ||
| let exceeds_max_path_length = false; | ||
| let exceeds_cltv_delta_limit = false; | ||
| let payment_failed_on_this_channel = false; | ||
| // For this test to run I want short_channel_id , dest_node_id . | ||
| let route = get_route(&our_id, &payment_params, &network_graph.read_only(), None, 49_000, 42, &logger, &scorer, &random_seed_bytes).unwrap(); | ||
| // Retrieve the log message from TestLogger | ||
| let lines = logger.lines.lock().unwrap(); | ||
| let mut log_output = String::new(); | ||
| for ((module, file), line) in &*lines { | ||
| ||
| log_output.push_str(&format!("{} [{}] {}: {}\n", line, module, line, file)); | ||
| } | ||
| // Check for expected messages in the log output | ||
| assert!(log_output.contains("First Hop 3 is excluded due to insufficient value")); // | ||
| // assert_log_contains(log_ouptuts , 1); | ||
| } | ||
| #[test] | ||
| fn simple_mpp_route_test() { | ||
| let (secp_ctx, network_graph, gossip_sync, _, logger) = build_graph(); | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You don't need to loop here, you can just do
first_hop_targets.get(&$dest_node_id)with anif let Some...ormatch. That should also let you drop theis_first_hopvariable.