@@ -465,24 +465,14 @@ where
465
465
/// It is extremely important that your [`KVStore::read`] implementation uses the
466
466
/// [`io::ErrorKind::NotFound`] variant correctly. For more information, please see the
467
467
/// documentation for [`MonitorUpdatingPersister`].
468
- pub fn read_all_channel_monitors_with_updates < B : Deref , F : Deref > (
469
- & self , broadcaster : & B , fee_estimator : & F ,
470
- ) -> Result < Vec < ( BlockHash , ChannelMonitor < <SP :: Target as SignerProvider >:: EcdsaSigner > ) > , io:: Error >
471
- where
472
- B :: Target : BroadcasterInterface ,
473
- F :: Target : FeeEstimator ,
474
- {
468
+ pub fn read_all_channel_monitors_with_updates ( & self ) -> Result < Vec < ( BlockHash , ChannelMonitor < <SP :: Target as SignerProvider >:: EcdsaSigner > ) > , io:: Error > {
475
469
let monitor_list = self . kv_store . list (
476
470
CHANNEL_MONITOR_PERSISTENCE_PRIMARY_NAMESPACE ,
477
471
CHANNEL_MONITOR_PERSISTENCE_SECONDARY_NAMESPACE ,
478
472
) ?;
479
473
let mut res = Vec :: with_capacity ( monitor_list. len ( ) ) ;
480
474
for monitor_key in monitor_list {
481
- res. push ( self . read_channel_monitor_with_updates (
482
- broadcaster,
483
- fee_estimator,
484
- monitor_key,
485
- ) ?)
475
+ res. push ( self . read_channel_monitor_with_updates ( monitor_key) ?)
486
476
}
487
477
Ok ( res)
488
478
}
@@ -504,13 +494,9 @@ where
504
494
///
505
495
/// Loading a large number of monitors will be faster if done in parallel. You can use this
506
496
/// function to accomplish this. Take care to limit the number of parallel readers.
507
- pub fn read_channel_monitor_with_updates < B : Deref , F : Deref > (
508
- & self , broadcaster : & B , fee_estimator : & F , monitor_key : String ,
509
- ) -> Result < ( BlockHash , ChannelMonitor < <SP :: Target as SignerProvider >:: EcdsaSigner > ) , io:: Error >
510
- where
511
- B :: Target : BroadcasterInterface ,
512
- F :: Target : FeeEstimator ,
513
- {
497
+ pub fn read_channel_monitor_with_updates (
498
+ & self , monitor_key : String ,
499
+ ) -> Result < ( BlockHash , ChannelMonitor < <SP :: Target as SignerProvider >:: EcdsaSigner > ) , io:: Error > {
514
500
let monitor_name = MonitorName :: new ( monitor_key) ?;
515
501
let ( block_hash, monitor) = self . read_monitor ( & monitor_name) ?;
516
502
let mut current_update_id = monitor. get_latest_update_id ( ) ;
@@ -529,7 +515,7 @@ where
529
515
Err ( err) => return Err ( err) ,
530
516
} ;
531
517
532
- monitor. update_monitor ( & update, broadcaster, fee_estimator, & self . logger )
518
+ monitor. update_monitor ( & update, & self . broadcaster , & self . fee_estimator , & self . logger )
533
519
. map_err ( |e| {
534
520
log_error ! (
535
521
self . logger,
@@ -776,50 +762,12 @@ where
776
762
777
763
fn archive_persisted_channel ( & self , funding_txo : OutPoint ) {
778
764
let monitor_name = MonitorName :: from ( funding_txo) ;
779
- let monitor = match self . read_monitor ( & monitor_name) {
765
+ let monitor_key = monitor_name. as_str ( ) . to_string ( ) ;
766
+ let monitor = match self . read_channel_monitor_with_updates ( monitor_key) {
780
767
Ok ( ( _block_hash, monitor) ) => monitor,
781
768
Err ( _) => return
782
769
} ;
783
770
784
- let mut current_update_id = monitor. get_latest_update_id ( ) ;
785
- loop {
786
- current_update_id = match current_update_id. checked_add ( 1 ) {
787
- Some ( next_update_id) => next_update_id,
788
- None => break ,
789
- } ;
790
- let update_name = UpdateName :: from ( current_update_id) ;
791
- let update = match self . read_monitor_update ( & monitor_name, & update_name) {
792
- Ok ( update) => update,
793
- Err ( err) if err. kind ( ) == io:: ErrorKind :: NotFound => {
794
- // We can't find any more updates, so we are done.
795
- break ;
796
- }
797
- Err ( err) => {
798
- log_error ! (
799
- self . logger,
800
- "Monitor update read failed. monitor: {} update: {} reason: {:?}" ,
801
- monitor_name. as_str( ) ,
802
- update_name. as_str( ) ,
803
- err
804
- ) ;
805
- panic ! ( )
806
- } ,
807
- } ;
808
-
809
- monitor. update_monitor ( & update, & self . broadcaster , & self . fee_estimator , & self . logger )
810
- . map_err ( |e| {
811
- log_error ! (
812
- self . logger,
813
- "Monitor update failed. monitor: {} update: {} reason: {:?}" ,
814
- monitor_name. as_str( ) ,
815
- update_name. as_str( ) ,
816
- e
817
- ) ;
818
- io:: Error :: new ( io:: ErrorKind :: Other , "Monitor update failed" )
819
- } )
820
- . expect ( "Could not apply monitor update during archiving" ) ;
821
- }
822
-
823
771
match self . kv_store . write (
824
772
ARCHIVED_CHANNEL_MONITOR_PERSISTENCE_PRIMARY_NAMESPACE ,
825
773
ARCHIVED_CHANNEL_MONITOR_PERSISTENCE_SECONDARY_NAMESPACE ,
@@ -1047,23 +995,18 @@ mod tests {
1047
995
node_cfgs[ 1 ] . chain_monitor = chain_mon_1;
1048
996
let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , None ] ) ;
1049
997
let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
1050
- let broadcaster_0 = & chanmon_cfgs[ 2 ] . tx_broadcaster ;
1051
- let broadcaster_1 = & chanmon_cfgs[ 3 ] . tx_broadcaster ;
1052
998
1053
999
// Check that the persisted channel data is empty before any channels are
1054
1000
// open.
1055
- let mut persisted_chan_data_0 = persister_0. read_all_channel_monitors_with_updates (
1056
- & broadcaster_0, & & chanmon_cfgs[ 0 ] . fee_estimator ) . unwrap ( ) ;
1001
+ let mut persisted_chan_data_0 = persister_0. read_all_channel_monitors_with_updates ( ) . unwrap ( ) ;
1057
1002
assert_eq ! ( persisted_chan_data_0. len( ) , 0 ) ;
1058
- let mut persisted_chan_data_1 = persister_1. read_all_channel_monitors_with_updates (
1059
- & broadcaster_1, & & chanmon_cfgs[ 1 ] . fee_estimator ) . unwrap ( ) ;
1003
+ let mut persisted_chan_data_1 = persister_1. read_all_channel_monitors_with_updates ( ) . unwrap ( ) ;
1060
1004
assert_eq ! ( persisted_chan_data_1. len( ) , 0 ) ;
1061
1005
1062
1006
// Helper to make sure the channel is on the expected update ID.
1063
1007
macro_rules! check_persisted_data {
1064
1008
( $expected_update_id: expr) => {
1065
- persisted_chan_data_0 = persister_0. read_all_channel_monitors_with_updates(
1066
- & broadcaster_0, &&chanmon_cfgs[ 0 ] . fee_estimator) . unwrap( ) ;
1009
+ persisted_chan_data_0 = persister_0. read_all_channel_monitors_with_updates( ) . unwrap( ) ;
1067
1010
// check that we stored only one monitor
1068
1011
assert_eq!( persisted_chan_data_0. len( ) , 1 ) ;
1069
1012
for ( _, mon) in persisted_chan_data_0. iter( ) {
@@ -1082,8 +1025,7 @@ mod tests {
1082
1025
) ;
1083
1026
}
1084
1027
}
1085
- persisted_chan_data_1 = persister_1. read_all_channel_monitors_with_updates(
1086
- & broadcaster_1, &&chanmon_cfgs[ 1 ] . fee_estimator) . unwrap( ) ;
1028
+ persisted_chan_data_1 = persister_1. read_all_channel_monitors_with_updates( ) . unwrap( ) ;
1087
1029
assert_eq!( persisted_chan_data_1. len( ) , 1 ) ;
1088
1030
for ( _, mon) in persisted_chan_data_1. iter( ) {
1089
1031
assert_eq!( mon. get_latest_update_id( ) , $expected_update_id) ;
@@ -1151,7 +1093,7 @@ mod tests {
1151
1093
check_persisted_data ! ( CLOSED_CHANNEL_UPDATE_ID ) ;
1152
1094
1153
1095
// Make sure the expected number of stale updates is present.
1154
- let persisted_chan_data = persister_0. read_all_channel_monitors_with_updates ( & broadcaster_0 , & & chanmon_cfgs [ 0 ] . fee_estimator ) . unwrap ( ) ;
1096
+ let persisted_chan_data = persister_0. read_all_channel_monitors_with_updates ( ) . unwrap ( ) ;
1155
1097
let ( _, monitor) = & persisted_chan_data[ 0 ] ;
1156
1098
let monitor_name = MonitorName :: from ( monitor. get_funding_txo ( ) . 0 ) ;
1157
1099
// The channel should have 0 updates, as it wrote a full monitor and consolidated.
@@ -1260,11 +1202,9 @@ mod tests {
1260
1202
let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , None ] ) ;
1261
1203
let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
1262
1204
1263
- let broadcaster_0 = & chanmon_cfgs[ 2 ] . tx_broadcaster ;
1264
-
1265
1205
// Check that the persisted channel data is empty before any channels are
1266
1206
// open.
1267
- let persisted_chan_data = persister_0. read_all_channel_monitors_with_updates ( & broadcaster_0 , & & chanmon_cfgs [ 0 ] . fee_estimator ) . unwrap ( ) ;
1207
+ let persisted_chan_data = persister_0. read_all_channel_monitors_with_updates ( ) . unwrap ( ) ;
1268
1208
assert_eq ! ( persisted_chan_data. len( ) , 0 ) ;
1269
1209
1270
1210
// Create some initial channel
@@ -1275,7 +1215,7 @@ mod tests {
1275
1215
send_payment ( & nodes[ 1 ] , & vec ! [ & nodes[ 0 ] ] [ ..] , 4_000_000 ) ;
1276
1216
1277
1217
// Get the monitor and make a fake stale update at update_id=1 (lowest height of an update possible)
1278
- let persisted_chan_data = persister_0. read_all_channel_monitors_with_updates ( & broadcaster_0 , & & chanmon_cfgs [ 0 ] . fee_estimator ) . unwrap ( ) ;
1218
+ let persisted_chan_data = persister_0. read_all_channel_monitors_with_updates ( ) . unwrap ( ) ;
1279
1219
let ( _, monitor) = & persisted_chan_data[ 0 ] ;
1280
1220
let monitor_name = MonitorName :: from ( monitor. get_funding_txo ( ) . 0 ) ;
1281
1221
persister_0
0 commit comments