@@ -11,7 +11,7 @@ use std::convert::TryInto;
1111use std:: default:: Default ;
1212#[ cfg( feature = "unified-payments" ) ]
1313use std:: net:: ToSocketAddrs ;
14- #[ cfg( feature = "storage-filesystem" ) ]
14+ #[ cfg( any ( feature = "storage-filesystem" , feature = "storage-tier" ) ) ]
1515use std:: path:: PathBuf ;
1616use std:: sync:: { Arc , Mutex , Once , RwLock } ;
1717use std:: time:: SystemTime ;
@@ -72,6 +72,7 @@ use crate::gossip::GossipSource;
7272use crate :: io:: fs_store:: open_or_migrate_fs_store;
7373#[ cfg( feature = "storage-sqlite" ) ]
7474use crate :: io:: sqlite_store:: SqliteStore ;
75+ #[ cfg( feature = "storage-tier" ) ]
7576use crate :: io:: tier_store:: { setup_index_store, TierStore } ;
7677use crate :: io:: utils:: {
7778 read_all_objects, read_event_queue, read_external_pathfinding_scores_from_cache,
@@ -174,6 +175,7 @@ impl std::fmt::Debug for LogWriterConfig {
174175 }
175176}
176177
178+ #[ cfg( feature = "storage-tier" ) ]
177179#[ derive( Default , Debug ) ]
178180struct TierStoreConfig {
179181 ephemeral_storage_dir_path : Option < PathBuf > ,
@@ -333,6 +335,7 @@ pub struct NodeBuilder {
333335 liquidity_source_config : Option < LiquiditySourceConfig > ,
334336 log_writer_config : Option < LogWriterConfig > ,
335337 async_payments_role : Option < AsyncPaymentsRole > ,
338+ #[ cfg( feature = "storage-tier" ) ]
336339 tier_store_config : Option < TierStoreConfig > ,
337340 runtime_handle : Option < tokio:: runtime:: Handle > ,
338341 pathfinding_scores_sync_config : Option < PathfindingScoresSyncConfig > ,
@@ -355,6 +358,7 @@ impl NodeBuilder {
355358 let gossip_source_config = None ;
356359 let liquidity_source_config = None ;
357360 let log_writer_config = None ;
361+ #[ cfg( feature = "storage-tier" ) ]
358362 let tier_store_config = None ;
359363 let runtime_handle = None ;
360364 let pathfinding_scores_sync_config = None ;
@@ -365,6 +369,7 @@ impl NodeBuilder {
365369 gossip_source_config,
366370 liquidity_source_config,
367371 log_writer_config,
372+ #[ cfg( feature = "storage-tier" ) ]
368373 tier_store_config,
369374 runtime_handle,
370375 async_payments_role : None ,
@@ -709,7 +714,7 @@ impl NodeBuilder {
709714 /// If not set, durable data will be stored only in the primary store.
710715 ///
711716 /// [`SQLITE_BACKUP_DB_FILE_NAME`]: crate::io::sqlite_store::SQLITE_BACKUP_DB_FILE_NAME
712- #[ cfg( not( feature = "uniffi" ) ) ]
717+ #[ cfg( all ( not( feature = "uniffi" ) , feature = "storage-tier ") ) ]
713718 pub fn set_backup_storage_dir_path ( & mut self , backup_storage_dir_path : String ) -> & mut Self {
714719 let tier_store_config = self . tier_store_config . get_or_insert ( TierStoreConfig :: default ( ) ) ;
715720 tier_store_config. backup_storage_dir_path = Some ( backup_storage_dir_path. into ( ) ) ;
@@ -722,7 +727,7 @@ impl NodeBuilder {
722727 /// the network graph and scorer. Data stored here can be rebuilt if lost.
723728 ///
724729 /// If not set, non-critical data will be stored in the primary store.
725- #[ cfg( not( feature = "uniffi" ) ) ]
730+ #[ cfg( all ( not( feature = "uniffi" ) , feature = "storage-tier ") ) ]
726731 pub fn set_ephemeral_storage_dir_path (
727732 & mut self , ephemeral_storage_dir_path : String ,
728733 ) -> & mut Self {
@@ -982,45 +987,52 @@ impl NodeBuilder {
982987 fn build_with_store_runtime_and_logger < S : PaginatedKVStore + Send + Sync + ' static > (
983988 & self , node_entropy : NodeEntropy , kv_store : S , runtime : Arc < Runtime > , logger : Arc < Logger > ,
984989 ) -> Result < Node , BuildError > {
985- let ts_config = self . tier_store_config . as_ref ( ) ;
986- let primary_store = Arc :: new ( DynStoreWrapper ( kv_store) ) ;
987- let mut tier_store = TierStore :: new ( primary_store, Arc :: clone ( & logger) ) ;
988- if let Some ( config) = ts_config {
989- if let Some ( ephemeral_storage_dir_path) = config. ephemeral_storage_dir_path . as_ref ( ) {
990- let index_store = runtime
991- . block_on ( setup_index_store ( self . config . storage_dir_path . clone ( ) . into ( ) ) )
990+ #[ cfg( feature = "storage-tier" ) ]
991+ let store: Arc < DynStore > = {
992+ let ts_config = self . tier_store_config . as_ref ( ) ;
993+ let primary_store = Arc :: new ( DynStoreWrapper ( kv_store) ) ;
994+ let mut tier_store = TierStore :: new ( primary_store, Arc :: clone ( & logger) ) ;
995+ if let Some ( config) = ts_config {
996+ if let Some ( ephemeral_storage_dir_path) = config. ephemeral_storage_dir_path . as_ref ( )
997+ {
998+ let index_store = runtime
999+ . block_on ( setup_index_store ( self . config . storage_dir_path . clone ( ) . into ( ) ) )
1000+ . map_err ( |e| {
1001+ log_error ! ( logger, "Failed to setup tier-store index: {}" , e) ;
1002+ BuildError :: KVStoreSetupFailed
1003+ } ) ?;
1004+ let ephemeral_store = SqliteStore :: new (
1005+ ephemeral_storage_dir_path. clone ( ) ,
1006+ Some ( io:: sqlite_store:: SQLITE_EPHEMERAL_DB_FILE_NAME . to_string ( ) ) ,
1007+ Some ( io:: sqlite_store:: KV_TABLE_NAME . to_string ( ) ) ,
1008+ )
9921009 . map_err ( |e| {
993- log_error ! ( logger, "Failed to setup tier-store index : {}" , e) ;
1010+ log_error ! ( logger, "Failed to setup ephemeral SQLite store : {}" , e) ;
9941011 BuildError :: KVStoreSetupFailed
9951012 } ) ?;
996- let ephemeral_store = SqliteStore :: new (
997- ephemeral_storage_dir_path. clone ( ) ,
998- Some ( io:: sqlite_store:: SQLITE_EPHEMERAL_DB_FILE_NAME . to_string ( ) ) ,
999- Some ( io:: sqlite_store:: KV_TABLE_NAME . to_string ( ) ) ,
1000- )
1001- . map_err ( |e| {
1002- log_error ! ( logger, "Failed to setup ephemeral SQLite store: {}" , e) ;
1003- BuildError :: KVStoreSetupFailed
1004- } ) ?;
1005- let ephemeral_store: Arc < DynStore > = Arc :: new ( DynStoreWrapper ( ephemeral_store) ) ;
1006- tier_store. set_index_store ( index_store) ;
1007- tier_store. set_ephemeral_store ( ephemeral_store) ;
1008- }
1013+ let ephemeral_store: Arc < DynStore > = Arc :: new ( DynStoreWrapper ( ephemeral_store) ) ;
1014+ tier_store. set_index_store ( index_store) ;
1015+ tier_store. set_ephemeral_store ( ephemeral_store) ;
1016+ }
10091017
1010- if let Some ( backup_storage_dir_path) = config. backup_storage_dir_path . as_ref ( ) {
1011- let backup_store = SqliteStore :: new (
1012- backup_storage_dir_path. clone ( ) ,
1013- Some ( io:: sqlite_store:: SQLITE_BACKUP_DB_FILE_NAME . to_string ( ) ) ,
1014- Some ( io:: sqlite_store:: KV_TABLE_NAME . to_string ( ) ) ,
1015- )
1016- . map_err ( |e| {
1017- log_error ! ( logger, "Failed to setup backup SQLite store: {}" , e) ;
1018- BuildError :: KVStoreSetupFailed
1019- } ) ?;
1020- let backup_store: Arc < DynStore > = Arc :: new ( DynStoreWrapper ( backup_store) ) ;
1021- tier_store. set_backup_store ( backup_store) ;
1018+ if let Some ( backup_storage_dir_path) = config. backup_storage_dir_path . as_ref ( ) {
1019+ let backup_store = SqliteStore :: new (
1020+ backup_storage_dir_path. clone ( ) ,
1021+ Some ( io:: sqlite_store:: SQLITE_BACKUP_DB_FILE_NAME . to_string ( ) ) ,
1022+ Some ( io:: sqlite_store:: KV_TABLE_NAME . to_string ( ) ) ,
1023+ )
1024+ . map_err ( |e| {
1025+ log_error ! ( logger, "Failed to setup backup SQLite store: {}" , e) ;
1026+ BuildError :: KVStoreSetupFailed
1027+ } ) ?;
1028+ let backup_store: Arc < DynStore > = Arc :: new ( DynStoreWrapper ( backup_store) ) ;
1029+ tier_store. set_backup_store ( backup_store) ;
1030+ }
10221031 }
1023- }
1032+ Arc :: new ( DynStoreWrapper ( tier_store) )
1033+ } ;
1034+ #[ cfg( not( feature = "storage-tier" ) ) ]
1035+ let store: Arc < DynStore > = Arc :: new ( DynStoreWrapper ( kv_store) ) ;
10241036
10251037 let seed_bytes = node_entropy. to_seed_bytes ( ) ;
10261038 let config = Arc :: new ( self . config . clone ( ) ) ;
@@ -1036,7 +1048,7 @@ impl NodeBuilder {
10361048 seed_bytes,
10371049 runtime,
10381050 logger,
1039- Arc :: new ( DynStoreWrapper ( tier_store ) ) ,
1051+ store ,
10401052 )
10411053 }
10421054}
0 commit comments