@@ -29,7 +29,7 @@ use crate::ln::msgs::{QueryChannelRange, ReplyChannelRange, QueryShortChannelIds
2929use crate :: ln:: msgs;
3030use crate :: util:: ser:: { Readable , ReadableArgs , Writeable , Writer , MaybeReadable } ;
3131use crate :: util:: logger:: { Logger , Level } ;
32- use crate :: util:: events:: { Event , EventHandler , MessageSendEvent , MessageSendEventsProvider } ;
32+ use crate :: util:: events:: { MessageSendEvent , MessageSendEventsProvider } ;
3333use crate :: util:: scid_utils:: { block_from_scid, scid_from_parts, MAX_SCID_BLOCK } ;
3434use crate :: util:: string:: PrintableString ;
3535
@@ -213,9 +213,6 @@ impl_writeable_tlv_based_enum_upgradable!(NetworkUpdate,
213213/// This network graph is then used for routing payments.
214214/// Provides interface to help with initial routing sync by
215215/// serving historical announcements.
216- ///
217- /// Serves as an [`EventHandler`] for applying updates from [`Event::PaymentPathFailed`] to the
218- /// [`NetworkGraph`].
219216pub struct P2PGossipSync < G : Deref < Target =NetworkGraph < L > > , C : Deref , L : Deref >
220217where C :: Target : chain:: Access , L :: Target : Logger
221218{
@@ -275,32 +272,31 @@ where C::Target: chain::Access, L::Target: Logger
275272 }
276273}
277274
278- impl < L : Deref > EventHandler for NetworkGraph < L > where L :: Target : Logger {
279- fn handle_event ( & self , event : & Event ) {
280- if let Event :: PaymentPathFailed { network_update, .. } = event {
281- if let Some ( network_update) = network_update {
282- match * network_update {
283- NetworkUpdate :: ChannelUpdateMessage { ref msg } => {
284- let short_channel_id = msg. contents . short_channel_id ;
285- let is_enabled = msg. contents . flags & ( 1 << 1 ) != ( 1 << 1 ) ;
286- let status = if is_enabled { "enabled" } else { "disabled" } ;
287- log_debug ! ( self . logger, "Updating channel with channel_update from a payment failure. Channel {} is {}." , short_channel_id, status) ;
288- let _ = self . update_channel ( msg) ;
289- } ,
290- NetworkUpdate :: ChannelFailure { short_channel_id, is_permanent } => {
291- let action = if is_permanent { "Removing" } else { "Disabling" } ;
292- log_debug ! ( self . logger, "{} channel graph entry for {} due to a payment failure." , action, short_channel_id) ;
293- self . channel_failed ( short_channel_id, is_permanent) ;
294- } ,
295- NetworkUpdate :: NodeFailure { ref node_id, is_permanent } => {
296- if is_permanent {
297- log_debug ! ( self . logger,
298- "Removed node graph entry for {} due to a payment failure." , log_pubkey!( node_id) ) ;
299- self . node_failed_permanent ( node_id) ;
300- } ;
301- } ,
302- }
303- }
275+ impl < L : Deref > NetworkGraph < L > where L :: Target : Logger {
276+ /// Handles any network updates originating from [`Event`]s.
277+ ///
278+ /// [`Event`]: crate::util::events::Event
279+ pub fn handle_network_update ( & self , network_update : & NetworkUpdate ) {
280+ match * network_update {
281+ NetworkUpdate :: ChannelUpdateMessage { ref msg } => {
282+ let short_channel_id = msg. contents . short_channel_id ;
283+ let is_enabled = msg. contents . flags & ( 1 << 1 ) != ( 1 << 1 ) ;
284+ let status = if is_enabled { "enabled" } else { "disabled" } ;
285+ log_debug ! ( self . logger, "Updating channel with channel_update from a payment failure. Channel {} is {}." , short_channel_id, status) ;
286+ let _ = self . update_channel ( msg) ;
287+ } ,
288+ NetworkUpdate :: ChannelFailure { short_channel_id, is_permanent } => {
289+ let action = if is_permanent { "Removing" } else { "Disabling" } ;
290+ log_debug ! ( self . logger, "{} channel graph entry for {} due to a payment failure." , action, short_channel_id) ;
291+ self . channel_failed ( short_channel_id, is_permanent) ;
292+ } ,
293+ NetworkUpdate :: NodeFailure { ref node_id, is_permanent } => {
294+ if is_permanent {
295+ log_debug ! ( self . logger,
296+ "Removed node graph entry for {} due to a payment failure." , log_pubkey!( node_id) ) ;
297+ self . node_failed_permanent ( node_id) ;
298+ } ;
299+ } ,
304300 }
305301 }
306302}
@@ -1931,15 +1927,14 @@ mod tests {
19311927 use crate :: chain;
19321928 use crate :: ln:: channelmanager;
19331929 use crate :: ln:: chan_utils:: make_funding_redeemscript;
1934- use crate :: ln:: PaymentHash ;
19351930 use crate :: ln:: features:: InitFeatures ;
19361931 use crate :: routing:: gossip:: { P2PGossipSync , NetworkGraph , NetworkUpdate , NodeAlias , MAX_EXCESS_BYTES_FOR_RELAY , NodeId , RoutingFees , ChannelUpdateInfo , ChannelInfo , NodeAnnouncementInfo , NodeInfo } ;
19371932 use crate :: ln:: msgs:: { RoutingMessageHandler , UnsignedNodeAnnouncement , NodeAnnouncement ,
19381933 UnsignedChannelAnnouncement , ChannelAnnouncement , UnsignedChannelUpdate , ChannelUpdate ,
19391934 ReplyChannelRange , QueryChannelRange , QueryShortChannelIds , MAX_VALUE_MSAT } ;
19401935 use crate :: util:: test_utils;
19411936 use crate :: util:: ser:: { ReadableArgs , Writeable } ;
1942- use crate :: util:: events:: { Event , EventHandler , MessageSendEvent , MessageSendEventsProvider } ;
1937+ use crate :: util:: events:: { MessageSendEvent , MessageSendEventsProvider } ;
19431938 use crate :: util:: scid_utils:: scid_from_parts;
19441939
19451940 use crate :: routing:: gossip:: REMOVED_ENTRIES_TRACKING_AGE_LIMIT_SECS ;
@@ -2383,19 +2378,8 @@ mod tests {
23832378 let valid_channel_update = get_signed_channel_update ( |_| { } , node_1_privkey, & secp_ctx) ;
23842379 assert ! ( network_graph. read_only( ) . channels( ) . get( & short_channel_id) . unwrap( ) . one_to_two. is_none( ) ) ;
23852380
2386- network_graph. handle_event ( & Event :: PaymentPathFailed {
2387- payment_id : None ,
2388- payment_hash : PaymentHash ( [ 0 ; 32 ] ) ,
2389- payment_failed_permanently : false ,
2390- all_paths_failed : true ,
2391- path : vec ! [ ] ,
2392- network_update : Some ( NetworkUpdate :: ChannelUpdateMessage {
2393- msg : valid_channel_update,
2394- } ) ,
2395- short_channel_id : None ,
2396- retry : None ,
2397- error_code : None ,
2398- error_data : None ,
2381+ network_graph. handle_network_update ( & NetworkUpdate :: ChannelUpdateMessage {
2382+ msg : valid_channel_update,
23992383 } ) ;
24002384
24012385 assert ! ( network_graph. read_only( ) . channels( ) . get( & short_channel_id) . unwrap( ) . one_to_two. is_some( ) ) ;
@@ -2410,20 +2394,9 @@ mod tests {
24102394 }
24112395 } ;
24122396
2413- network_graph. handle_event ( & Event :: PaymentPathFailed {
2414- payment_id : None ,
2415- payment_hash : PaymentHash ( [ 0 ; 32 ] ) ,
2416- payment_failed_permanently : false ,
2417- all_paths_failed : true ,
2418- path : vec ! [ ] ,
2419- network_update : Some ( NetworkUpdate :: ChannelFailure {
2420- short_channel_id,
2421- is_permanent : false ,
2422- } ) ,
2423- short_channel_id : None ,
2424- retry : None ,
2425- error_code : None ,
2426- error_data : None ,
2397+ network_graph. handle_network_update ( & NetworkUpdate :: ChannelFailure {
2398+ short_channel_id,
2399+ is_permanent : false ,
24272400 } ) ;
24282401
24292402 match network_graph. read_only ( ) . channels ( ) . get ( & short_channel_id) {
@@ -2435,20 +2408,9 @@ mod tests {
24352408 }
24362409
24372410 // Permanent closing deletes a channel
2438- network_graph. handle_event ( & Event :: PaymentPathFailed {
2439- payment_id : None ,
2440- payment_hash : PaymentHash ( [ 0 ; 32 ] ) ,
2441- payment_failed_permanently : false ,
2442- all_paths_failed : true ,
2443- path : vec ! [ ] ,
2444- network_update : Some ( NetworkUpdate :: ChannelFailure {
2445- short_channel_id,
2446- is_permanent : true ,
2447- } ) ,
2448- short_channel_id : None ,
2449- retry : None ,
2450- error_code : None ,
2451- error_data : None ,
2411+ network_graph. handle_network_update ( & NetworkUpdate :: ChannelFailure {
2412+ short_channel_id,
2413+ is_permanent : true ,
24522414 } ) ;
24532415
24542416 assert_eq ! ( network_graph. read_only( ) . channels( ) . len( ) , 0 ) ;
@@ -2467,40 +2429,18 @@ mod tests {
24672429 assert ! ( network_graph. read_only( ) . channels( ) . get( & short_channel_id) . is_some( ) ) ;
24682430
24692431 // Non-permanent node failure does not delete any nodes or channels
2470- network_graph. handle_event ( & Event :: PaymentPathFailed {
2471- payment_id : None ,
2472- payment_hash : PaymentHash ( [ 0 ; 32 ] ) ,
2473- payment_failed_permanently : false ,
2474- all_paths_failed : true ,
2475- path : vec ! [ ] ,
2476- network_update : Some ( NetworkUpdate :: NodeFailure {
2477- node_id : node_2_id,
2478- is_permanent : false ,
2479- } ) ,
2480- short_channel_id : None ,
2481- retry : None ,
2482- error_code : None ,
2483- error_data : None ,
2432+ network_graph. handle_network_update ( & NetworkUpdate :: NodeFailure {
2433+ node_id : node_2_id,
2434+ is_permanent : false ,
24842435 } ) ;
24852436
24862437 assert ! ( network_graph. read_only( ) . channels( ) . get( & short_channel_id) . is_some( ) ) ;
24872438 assert ! ( network_graph. read_only( ) . nodes( ) . get( & NodeId :: from_pubkey( & node_2_id) ) . is_some( ) ) ;
24882439
24892440 // Permanent node failure deletes node and its channels
2490- network_graph. handle_event ( & Event :: PaymentPathFailed {
2491- payment_id : None ,
2492- payment_hash : PaymentHash ( [ 0 ; 32 ] ) ,
2493- payment_failed_permanently : false ,
2494- all_paths_failed : true ,
2495- path : vec ! [ ] ,
2496- network_update : Some ( NetworkUpdate :: NodeFailure {
2497- node_id : node_2_id,
2498- is_permanent : true ,
2499- } ) ,
2500- short_channel_id : None ,
2501- retry : None ,
2502- error_code : None ,
2503- error_data : None ,
2441+ network_graph. handle_network_update ( & NetworkUpdate :: NodeFailure {
2442+ node_id : node_2_id,
2443+ is_permanent : true ,
25042444 } ) ;
25052445
25062446 assert_eq ! ( network_graph. read_only( ) . nodes( ) . len( ) , 0 ) ;
0 commit comments