88use std:: collections:: HashMap ;
99use std:: convert:: TryInto ;
1010use std:: default:: Default ;
11- use std:: path:: PathBuf ;
11+ use std:: path:: { Path , PathBuf } ;
1212use std:: sync:: { Arc , Mutex , Once , RwLock } ;
1313use std:: time:: SystemTime ;
1414use std:: { fmt, fs} ;
@@ -34,8 +34,13 @@ use lightning::routing::scoring::{
3434use lightning:: sign:: { EntropySource , NodeSigner } ;
3535use lightning:: util:: persist:: {
3636 KVStoreSync , CHANNEL_MANAGER_PERSISTENCE_KEY , CHANNEL_MANAGER_PERSISTENCE_PRIMARY_NAMESPACE ,
37- CHANNEL_MANAGER_PERSISTENCE_SECONDARY_NAMESPACE ,
37+ CHANNEL_MANAGER_PERSISTENCE_SECONDARY_NAMESPACE , CHANNEL_MONITOR_PERSISTENCE_PRIMARY_NAMESPACE ,
38+ CHANNEL_MONITOR_PERSISTENCE_SECONDARY_NAMESPACE , NETWORK_GRAPH_PERSISTENCE_KEY ,
39+ NETWORK_GRAPH_PERSISTENCE_PRIMARY_NAMESPACE , NETWORK_GRAPH_PERSISTENCE_SECONDARY_NAMESPACE ,
40+ SCORER_PERSISTENCE_KEY , SCORER_PERSISTENCE_PRIMARY_NAMESPACE ,
41+ SCORER_PERSISTENCE_SECONDARY_NAMESPACE ,
3842} ;
43+
3944use lightning:: util:: ser:: ReadableArgs ;
4045use lightning:: util:: sweep:: OutputSweeper ;
4146use lightning_persister:: fs_store:: FilesystemStore ;
@@ -65,19 +70,21 @@ use crate::io::{
6570use crate :: liquidity:: {
6671 LSPS1ClientConfig , LSPS2ClientConfig , LSPS2ServiceConfig , LiquiditySourceBuilder ,
6772} ;
68- use crate :: logger:: { log_error, LdkLogger , LogLevel , LogWriter , Logger } ;
73+ use crate :: logger:: { log_error, log_info , LdkLogger , LogLevel , LogWriter , Logger } ;
6974use crate :: message_handler:: NodeCustomMessageHandler ;
7075use crate :: payment:: asynchronous:: om_mailbox:: OnionMessageMailbox ;
7176use crate :: peer_store:: PeerStore ;
7277use crate :: runtime:: Runtime ;
7378use crate :: tx_broadcaster:: TransactionBroadcaster ;
7479use crate :: types:: {
75- ChainMonitor , ChannelManager , DynStore , GossipSync , Graph , KeysManager , MessageRouter ,
76- OnionMessenger , PaymentStore , PeerManager , Persister ,
80+ ChainMonitor , ChannelManager , DynStore , GossipSync , Graph , KeyValue , KeysManager ,
81+ MessageRouter , MigrateStorage , OnionMessenger , PaymentStore , PeerManager , Persister ,
82+ ResetState ,
7783} ;
7884use crate :: wallet:: persist:: KVStoreWalletPersister ;
7985use crate :: wallet:: Wallet ;
8086use crate :: { Node , NodeMetrics } ;
87+ use chrono:: Local ;
8188
8289const VSS_HARDENED_CHILD_INDEX : u32 = 877 ;
8390const VSS_LNURL_AUTH_HARDENED_CHILD_INDEX : u32 = 138 ;
@@ -252,7 +259,7 @@ pub struct NodeBuilder {
252259 chain_data_source_config : Option < ChainDataSourceConfig > ,
253260 gossip_source_config : Option < GossipSourceConfig > ,
254261 liquidity_source_config : Option < LiquiditySourceConfig > ,
255- monitors_to_restore : Option < Vec < KeyValue > > ,
262+ monitors_to_restore : Option < Vec < KeyValue > > , // Alby: for hub recovery with SCB backup file
256263 reset_state : Option < ResetState > ,
257264 migrate_storage : Option < MigrateStorage > ,
258265 log_writer_config : Option < LogWriterConfig > ,
@@ -618,8 +625,9 @@ impl NodeBuilder {
618625 let storage_dir_path = self . config . storage_dir_path . clone ( ) ;
619626 fs:: create_dir_all ( storage_dir_path. clone ( ) )
620627 . map_err ( |_| BuildError :: StoragePathAccessFailed ) ?;
621- let sql_store_config =
622- SqliteStoreConfig { transient_graph : self . config . transient_network_graph } ;
628+ let sql_store_config = io:: sqlite_store:: SqliteStoreConfig {
629+ transient_graph : self . config . transient_network_graph ,
630+ } ;
623631 let kv_store = Arc :: new (
624632 SqliteStore :: with_config (
625633 storage_dir_path. into ( ) ,
@@ -805,13 +813,14 @@ impl NodeBuilder {
805813 Some ( io:: sqlite_store:: KV_TABLE_NAME . to_string ( ) ) ,
806814 )
807815 . map_err ( |_| BuildError :: KVStoreSetupFailed ) ?,
808- ) as Arc < DynStore > ) ;
816+ ) as Arc < SqliteStore > ) ;
809817 }
810818
811819 // Alby: use a secondary KV store for non-essential data (not needed by VSS)
812820 let storage_dir_path = config. storage_dir_path . clone ( ) ;
813- let sql_store_config =
814- SqliteStoreConfig { transient_graph : self . config . transient_network_graph } ;
821+ let sql_store_config = io:: sqlite_store:: SqliteStoreConfig {
822+ transient_graph : self . config . transient_network_graph ,
823+ } ;
815824 let secondary_kv_store = Arc :: new (
816825 SqliteStore :: with_config (
817826 storage_dir_path. into ( ) ,
@@ -851,7 +860,7 @@ impl NodeBuilder {
851860 BuildError :: KVStoreSetupFailed
852861 } ) ?;
853862 // write value to new store
854- vss_store. write ( primary_namespace, secondary_namespace, key, & value) . map_err (
863+ vss_store. write ( primary_namespace, secondary_namespace, key, value) . map_err (
855864 |e| {
856865 log_error ! ( logger, "Failed to migrate value: {}" , e) ;
857866 BuildError :: KVStoreSetupFailed
@@ -934,7 +943,7 @@ impl NodeBuilder {
934943 if self . monitors_to_restore . is_some ( ) {
935944 let monitors = self . monitors_to_restore . clone ( ) . unwrap ( ) ;
936945 for monitor in monitors {
937- let result = kv_store. write ( "monitors" , "" , & monitor. key , & monitor. value ) ;
946+ let result = & * kv_store. write ( "monitors" , "" , & monitor. key , & monitor. value ) ;
938947 if result. is_err ( ) {
939948 log_error ! ( logger, "Failed to restore monitor: {}" , result. unwrap_err( ) ) ;
940949 }
0 commit comments