@@ -18,7 +18,7 @@ use lightning::util::persist::{
1818use lightning:: { io, log_error} ;
1919use tokio:: sync:: Mutex as TokioMutex ;
2020
21- use crate :: io:: utils:: check_namespace_key_validity;
21+ use crate :: io:: utils:: { check_namespace_key_validity, EXTERNAL_PATHFINDING_SCORES_CACHE_KEY } ;
2222use crate :: logger:: { LdkLogger , Logger } ;
2323use crate :: types:: DynStore ;
2424
@@ -605,6 +605,7 @@ fn is_ephemeral_cached_key(pn: &str, sn: &str, key: &str) -> bool {
605605 ( pn, sn, key) ,
606606 ( NETWORK_GRAPH_PERSISTENCE_PRIMARY_NAMESPACE , _, NETWORK_GRAPH_PERSISTENCE_KEY )
607607 | ( SCORER_PERSISTENCE_PRIMARY_NAMESPACE , _, SCORER_PERSISTENCE_KEY )
608+ | ( SCORER_PERSISTENCE_PRIMARY_NAMESPACE , _, EXTERNAL_PATHFINDING_SCORES_CACHE_KEY )
608609 )
609610}
610611
@@ -621,7 +622,7 @@ mod tests {
621622 CHANNEL_MANAGER_PERSISTENCE_SECONDARY_NAMESPACE ,
622623 CHANNEL_MONITOR_PERSISTENCE_PRIMARY_NAMESPACE ,
623624 CHANNEL_MONITOR_PERSISTENCE_SECONDARY_NAMESPACE ,
624- NETWORK_GRAPH_PERSISTENCE_SECONDARY_NAMESPACE ,
625+ NETWORK_GRAPH_PERSISTENCE_SECONDARY_NAMESPACE , SCORER_PERSISTENCE_SECONDARY_NAMESPACE ,
625626 } ;
626627 use lightning_persister:: fs_store:: v2:: FilesystemStoreV2 ;
627628
@@ -779,6 +780,69 @@ mod tests {
779780 assert_eq ! ( primary_read_cm. unwrap( ) , data) ;
780781 }
781782
783+ #[ tokio:: test]
784+ async fn external_pathfinding_scores_cache_routes_to_ephemeral_store ( ) {
785+ let base_dir = random_storage_path ( ) ;
786+ let log_path = base_dir. join ( "tier_store_test.log" ) . to_string_lossy ( ) . into_owned ( ) ;
787+ let logger = Arc :: new ( Logger :: new_fs_writer ( log_path, Level :: Trace ) . unwrap ( ) ) ;
788+
789+ let _cleanup = CleanupDir ( base_dir. clone ( ) ) ;
790+
791+ let primary_store: Arc < DynStore > =
792+ Arc :: new ( DynStoreWrapper ( FilesystemStoreV2 :: new ( base_dir. join ( "primary" ) ) . unwrap ( ) ) ) ;
793+ let mut tier = setup_tier_store ( Arc :: clone ( & primary_store) , logger) ;
794+
795+ let ephemeral_store: Arc < DynStore > =
796+ Arc :: new ( DynStoreWrapper ( FilesystemStoreV2 :: new ( base_dir. join ( "ephemeral" ) ) . unwrap ( ) ) ) ;
797+ tier. set_ephemeral_store ( Arc :: clone ( & ephemeral_store) ) ;
798+
799+ let data = vec ! [ 42u8 ; 32 ] ;
800+ tier. write (
801+ SCORER_PERSISTENCE_PRIMARY_NAMESPACE ,
802+ SCORER_PERSISTENCE_SECONDARY_NAMESPACE ,
803+ EXTERNAL_PATHFINDING_SCORES_CACHE_KEY ,
804+ data. clone ( ) ,
805+ )
806+ . await
807+ . unwrap ( ) ;
808+
809+ assert ! ( primary_store
810+ . read(
811+ SCORER_PERSISTENCE_PRIMARY_NAMESPACE ,
812+ SCORER_PERSISTENCE_SECONDARY_NAMESPACE ,
813+ EXTERNAL_PATHFINDING_SCORES_CACHE_KEY ,
814+ )
815+ . await
816+ . is_err( ) ) ;
817+ assert_eq ! (
818+ tier. read(
819+ SCORER_PERSISTENCE_PRIMARY_NAMESPACE ,
820+ SCORER_PERSISTENCE_SECONDARY_NAMESPACE ,
821+ EXTERNAL_PATHFINDING_SCORES_CACHE_KEY ,
822+ )
823+ . await
824+ . unwrap( ) ,
825+ data
826+ ) ;
827+
828+ tier. remove (
829+ SCORER_PERSISTENCE_PRIMARY_NAMESPACE ,
830+ SCORER_PERSISTENCE_SECONDARY_NAMESPACE ,
831+ EXTERNAL_PATHFINDING_SCORES_CACHE_KEY ,
832+ false ,
833+ )
834+ . await
835+ . unwrap ( ) ;
836+ assert ! ( ephemeral_store
837+ . read(
838+ SCORER_PERSISTENCE_PRIMARY_NAMESPACE ,
839+ SCORER_PERSISTENCE_SECONDARY_NAMESPACE ,
840+ EXTERNAL_PATHFINDING_SCORES_CACHE_KEY ,
841+ )
842+ . await
843+ . is_err( ) ) ;
844+ }
845+
782846 #[ tokio:: test]
783847 async fn list_exposes_primary_and_routed_ephemeral_keys ( ) {
784848 let base_dir = random_storage_path ( ) ;
0 commit comments