-
Notifications
You must be signed in to change notification settings - Fork 403
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
Changes from all commits
9073b8d
02dddb4
0312c2b
3cdb8ed
b6ac4ec
cfe611a
5bd7708
87eef3f
bb6c7f6
aef2aa6
4a2c289
a8781ca
0e5e8a6
3240053
b913098
8d2a85d
fe93ed8
6da0e06
78dbb77
0be98f5
c830123
9bc34a1
1969bb7
7febd5b
4364e18
34d21dc
592f615
c633d31
File filter
Filter by extension
Conversations
Jump to
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); | ||
|
||
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 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 | ||
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 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 { | ||
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 don't have to iterate over the lines here, you can just do |
||
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_hop
variable.