Skip to content

Commit e245fc0

Browse files
committed
Move test store checks onto async KV storage
Exercise async KVStore operations in TestSyncStore and filesystem migration tests while keeping the temporary sync comparison path until the final KVStoreSync removal. Also route pathfinding score export through async KVStore reads. Co-Authored-By: HAL 9000
1 parent f43fa96 commit e245fc0

3 files changed

Lines changed: 211 additions & 76 deletions

File tree

src/io/utils.rs

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -718,7 +718,7 @@ mod tests {
718718
use std::fs;
719719
use std::path::{Path, PathBuf};
720720

721-
use lightning::util::persist::{migrate_kv_store_data, KVStoreSync};
721+
use lightning::util::persist::{migrate_kv_store_data_async, KVStore};
722722
use lightning_persister::fs_store::v1::FilesystemStore;
723723
use lightning_persister::fs_store::v2::FilesystemStoreV2;
724724

@@ -742,19 +742,20 @@ mod tests {
742742
#[tokio::test]
743743
async fn fs_store_migration_recovers_before_v1_backup_rename() {
744744
let fs_store_path = fs_store_path();
745-
let mut v1_store = write_v1_test_data(&fs_store_path);
745+
let v1_store = write_v1_test_data(&fs_store_path).await;
746746
let v2_migrating_path = sibling_path(&fs_store_path, "fs_store_v2_migrating");
747-
let mut v2_store = FilesystemStoreV2::new(v2_migrating_path.clone()).unwrap();
748-
migrate_kv_store_data(&mut v1_store, &mut v2_store).unwrap();
747+
let v2_store = FilesystemStoreV2::new(v2_migrating_path.clone()).unwrap();
748+
migrate_kv_store_data_async(&v1_store, &v2_store).await.unwrap();
749749

750750
let migrated_store = open_or_migrate_fs_store(fs_store_path.clone()).await.unwrap();
751751
assert_eq!(
752-
KVStoreSync::read(
752+
KVStore::read(
753753
&migrated_store,
754754
TEST_PRIMARY_NAMESPACE,
755755
TEST_SECONDARY_NAMESPACE,
756756
TEST_KEY
757757
)
758+
.await
758759
.unwrap(),
759760
TEST_VALUE
760761
);
@@ -765,22 +766,23 @@ mod tests {
765766
#[tokio::test]
766767
async fn fs_store_migration_recovers_after_v1_backup_rename() {
767768
let fs_store_path = fs_store_path();
768-
let mut v1_store = write_v1_test_data(&fs_store_path);
769+
let v1_store = write_v1_test_data(&fs_store_path).await;
769770
let v2_migrating_path = sibling_path(&fs_store_path, "fs_store_v2_migrating");
770-
let mut v2_store = FilesystemStoreV2::new(v2_migrating_path.clone()).unwrap();
771-
migrate_kv_store_data(&mut v1_store, &mut v2_store).unwrap();
771+
let v2_store = FilesystemStoreV2::new(v2_migrating_path.clone()).unwrap();
772+
migrate_kv_store_data_async(&v1_store, &v2_store).await.unwrap();
772773

773774
let backup_path = sibling_path(&fs_store_path, "fs_store_v1_backup");
774775
fs::rename(&fs_store_path, backup_path).unwrap();
775776

776777
let migrated_store = open_or_migrate_fs_store(fs_store_path.clone()).await.unwrap();
777778
assert_eq!(
778-
KVStoreSync::read(
779+
KVStore::read(
779780
&migrated_store,
780781
TEST_PRIMARY_NAMESPACE,
781782
TEST_SECONDARY_NAMESPACE,
782783
TEST_KEY
783784
)
785+
.await
784786
.unwrap(),
785787
TEST_VALUE
786788
);
@@ -791,23 +793,24 @@ mod tests {
791793
#[tokio::test]
792794
async fn fs_store_migration_recovers_after_v2_rename() {
793795
let fs_store_path = fs_store_path();
794-
let mut v1_store = write_v1_test_data(&fs_store_path);
796+
let v1_store = write_v1_test_data(&fs_store_path).await;
795797
let v2_migrating_path = sibling_path(&fs_store_path, "fs_store_v2_migrating");
796-
let mut v2_store = FilesystemStoreV2::new(v2_migrating_path.clone()).unwrap();
797-
migrate_kv_store_data(&mut v1_store, &mut v2_store).unwrap();
798+
let v2_store = FilesystemStoreV2::new(v2_migrating_path.clone()).unwrap();
799+
migrate_kv_store_data_async(&v1_store, &v2_store).await.unwrap();
798800

799801
let backup_path = sibling_path(&fs_store_path, "fs_store_v1_backup");
800802
fs::rename(&fs_store_path, &backup_path).unwrap();
801803
fs::rename(&v2_migrating_path, &fs_store_path).unwrap();
802804

803805
let migrated_store = open_or_migrate_fs_store(fs_store_path.clone()).await.unwrap();
804806
assert_eq!(
805-
KVStoreSync::read(
807+
KVStore::read(
806808
&migrated_store,
807809
TEST_PRIMARY_NAMESPACE,
808810
TEST_SECONDARY_NAMESPACE,
809811
TEST_KEY
810812
)
813+
.await
811814
.unwrap(),
812815
TEST_VALUE
813816
);
@@ -819,19 +822,20 @@ mod tests {
819822
#[tokio::test]
820823
async fn fs_store_migration_recovers_backup_without_migrating_dir() {
821824
let fs_store_path = fs_store_path();
822-
write_v1_test_data(&fs_store_path);
825+
write_v1_test_data(&fs_store_path).await;
823826

824827
let backup_path = sibling_path(&fs_store_path, "fs_store_v1_backup");
825828
fs::rename(&fs_store_path, backup_path).unwrap();
826829

827830
let migrated_store = open_or_migrate_fs_store(fs_store_path.clone()).await.unwrap();
828831
assert_eq!(
829-
KVStoreSync::read(
832+
KVStore::read(
830833
&migrated_store,
831834
TEST_PRIMARY_NAMESPACE,
832835
TEST_SECONDARY_NAMESPACE,
833836
TEST_KEY
834837
)
838+
.await
835839
.unwrap(),
836840
TEST_VALUE
837841
);
@@ -844,23 +848,25 @@ mod tests {
844848
let fs_store_path = fs_store_path();
845849
let v2_migrating_path = sibling_path(&fs_store_path, "fs_store_v2_migrating");
846850
let v2_store = FilesystemStoreV2::new(v2_migrating_path.clone()).unwrap();
847-
KVStoreSync::write(
851+
KVStore::write(
848852
&v2_store,
849853
TEST_PRIMARY_NAMESPACE,
850854
TEST_SECONDARY_NAMESPACE,
851855
TEST_KEY,
852856
TEST_VALUE.to_vec(),
853857
)
858+
.await
854859
.unwrap();
855860

856861
let migrated_store = open_or_migrate_fs_store(fs_store_path.clone()).await.unwrap();
857862
assert_eq!(
858-
KVStoreSync::read(
863+
KVStore::read(
859864
&migrated_store,
860865
TEST_PRIMARY_NAMESPACE,
861866
TEST_SECONDARY_NAMESPACE,
862867
TEST_KEY
863868
)
869+
.await
864870
.unwrap(),
865871
TEST_VALUE
866872
);
@@ -880,15 +886,16 @@ mod tests {
880886
sibling_path
881887
}
882888

883-
fn write_v1_test_data(fs_store_path: &Path) -> FilesystemStore {
889+
async fn write_v1_test_data(fs_store_path: &Path) -> FilesystemStore {
884890
let v1_store = FilesystemStore::new(fs_store_path.to_path_buf());
885-
KVStoreSync::write(
891+
KVStore::write(
886892
&v1_store,
887893
TEST_PRIMARY_NAMESPACE,
888894
TEST_SECONDARY_NAMESPACE,
889895
TEST_KEY,
890896
TEST_VALUE.to_vec(),
891897
)
898+
.await
892899
.unwrap();
893900
v1_store
894901
}

src/lib.rs

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ use lightning::ln::msgs::{BaseMessageHandler, SocketAddress};
155155
use lightning::ln::peer_handler::CustomMessageHandler;
156156
use lightning::routing::gossip::NodeAlias;
157157
use lightning::sign::EntropySource;
158-
use lightning::util::persist::KVStoreSync;
158+
use lightning::util::persist::KVStore;
159159
use lightning::util::wallet_utils::{Input, Wallet as LdkWallet};
160160
use lightning_background_processor::process_events_async;
161161
pub use lightning_invoice;
@@ -2062,20 +2062,21 @@ impl Node {
20622062
/// Exports the current state of the scorer. The result can be shared with and merged by light nodes that only have
20632063
/// a limited view of the network.
20642064
pub fn export_pathfinding_scores(&self) -> Result<Vec<u8>, Error> {
2065-
KVStoreSync::read(
2066-
&*self.kv_store,
2067-
lightning::util::persist::SCORER_PERSISTENCE_PRIMARY_NAMESPACE,
2068-
lightning::util::persist::SCORER_PERSISTENCE_SECONDARY_NAMESPACE,
2069-
lightning::util::persist::SCORER_PERSISTENCE_KEY,
2070-
)
2071-
.map_err(|e| {
2072-
log_error!(
2073-
self.logger,
2074-
"Failed to access store while exporting pathfinding scores: {}",
2075-
e
2076-
);
2077-
Error::PersistenceFailed
2078-
})
2065+
self.runtime
2066+
.block_on(KVStore::read(
2067+
&*self.kv_store,
2068+
lightning::util::persist::SCORER_PERSISTENCE_PRIMARY_NAMESPACE,
2069+
lightning::util::persist::SCORER_PERSISTENCE_SECONDARY_NAMESPACE,
2070+
lightning::util::persist::SCORER_PERSISTENCE_KEY,
2071+
))
2072+
.map_err(|e| {
2073+
log_error!(
2074+
self.logger,
2075+
"Failed to access store while exporting pathfinding scores: {}",
2076+
e
2077+
);
2078+
Error::PersistenceFailed
2079+
})
20792080
}
20802081

20812082
/// Return the features used in node announcement.

0 commit comments

Comments
 (0)