Skip to content

Commit 9290e8b

Browse files
committed
fixup! Implement tiered storage
Route the external pathfinding scores cache through the ephemeral store, alongside the network graph and scorer, as it is rebuildable cached data. Add coverage for writing, reading, and removing the cache through the ephemeral tier.
1 parent 29fa6fb commit 9290e8b

1 file changed

Lines changed: 66 additions & 2 deletions

File tree

src/io/tier_store.rs

Lines changed: 66 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use lightning::util::persist::{
1818
use lightning::{io, log_error};
1919
use 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};
2222
use crate::logger::{LdkLogger, Logger};
2323
use 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

Comments
 (0)