X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning-persister%2Fsrc%2Ffs_store.rs;h=364a3ee706f5288fd61dc52df53d6c135799f1cd;hb=ef2e739295be14b09d2cb6f7b2d6d7b089d2eea4;hp=6725e16974b8f3dd1b781af12e819e95db2931cc;hpb=23c5308bcbea61d89b1e5d3df6b6da721bc74c2a;p=rust-lightning diff --git a/lightning-persister/src/fs_store.rs b/lightning-persister/src/fs_store.rs index 6725e169..364a3ee7 100644 --- a/lightning-persister/src/fs_store.rs +++ b/lightning-persister/src/fs_store.rs @@ -67,7 +67,7 @@ impl FilesystemStore { } } - fn get_dest_dir_path(&self, namespace: &str, sub_namespace: &str) -> std::io::Result { + fn get_dest_dir_path(&self, primary_namespace: &str, secondary_namespace: &str) -> std::io::Result { let mut dest_dir_path = { #[cfg(target_os = "windows")] { @@ -81,9 +81,9 @@ impl FilesystemStore { } }; - dest_dir_path.push(namespace); - if !sub_namespace.is_empty() { - dest_dir_path.push(sub_namespace); + dest_dir_path.push(primary_namespace); + if !secondary_namespace.is_empty() { + dest_dir_path.push(secondary_namespace); } Ok(dest_dir_path) @@ -91,10 +91,10 @@ impl FilesystemStore { } impl KVStore for FilesystemStore { - fn read(&self, namespace: &str, sub_namespace: &str, key: &str) -> std::io::Result> { - check_namespace_key_validity(namespace, sub_namespace, Some(key), "read")?; + fn read(&self, primary_namespace: &str, secondary_namespace: &str, key: &str) -> std::io::Result> { + check_namespace_key_validity(primary_namespace, secondary_namespace, Some(key), "read")?; - let mut dest_file_path = self.get_dest_dir_path(namespace, sub_namespace)?; + let mut dest_file_path = self.get_dest_dir_path(primary_namespace, secondary_namespace)?; dest_file_path.push(key); let mut buf = Vec::new(); @@ -114,10 +114,10 @@ impl KVStore for FilesystemStore { Ok(buf) } - fn write(&self, namespace: &str, sub_namespace: &str, key: &str, buf: &[u8]) -> std::io::Result<()> { - check_namespace_key_validity(namespace, sub_namespace, Some(key), "write")?; + fn write(&self, primary_namespace: &str, secondary_namespace: &str, key: &str, buf: &[u8]) -> std::io::Result<()> { + check_namespace_key_validity(primary_namespace, secondary_namespace, Some(key), "write")?; - let mut dest_file_path = self.get_dest_dir_path(namespace, sub_namespace)?; + let mut dest_file_path = self.get_dest_dir_path(primary_namespace, secondary_namespace)?; dest_file_path.push(key); let parent_directory = dest_file_path @@ -201,10 +201,10 @@ impl KVStore for FilesystemStore { res } - fn remove(&self, namespace: &str, sub_namespace: &str, key: &str, lazy: bool) -> std::io::Result<()> { - check_namespace_key_validity(namespace, sub_namespace, Some(key), "remove")?; + fn remove(&self, primary_namespace: &str, secondary_namespace: &str, key: &str, lazy: bool) -> std::io::Result<()> { + check_namespace_key_validity(primary_namespace, secondary_namespace, Some(key), "remove")?; - let mut dest_file_path = self.get_dest_dir_path(namespace, sub_namespace)?; + let mut dest_file_path = self.get_dest_dir_path(primary_namespace, secondary_namespace)?; dest_file_path.push(key); if !dest_file_path.is_file() { @@ -290,10 +290,10 @@ impl KVStore for FilesystemStore { Ok(()) } - fn list(&self, namespace: &str, sub_namespace: &str) -> std::io::Result> { - check_namespace_key_validity(namespace, sub_namespace, None, "list")?; + fn list(&self, primary_namespace: &str, secondary_namespace: &str) -> std::io::Result> { + check_namespace_key_validity(primary_namespace, secondary_namespace, None, "list")?; - let prefixed_dest = self.get_dest_dir_path(namespace, sub_namespace)?; + let prefixed_dest = self.get_dest_dir_path(primary_namespace, secondary_namespace)?; let mut keys = Vec::new(); if !Path::new(&prefixed_dest).exists() { @@ -320,7 +320,7 @@ impl KVStore for FilesystemStore { let metadata = p.metadata()?; - // We allow the presence of directories in the empty namespace and just skip them. + // We allow the presence of directories in the empty primary namespace and just skip them. if metadata.is_dir() { continue; } @@ -328,9 +328,9 @@ impl KVStore for FilesystemStore { // If we otherwise don't find a file at the given path something went wrong. if !metadata.is_file() { debug_assert!(false, "Failed to list keys of {}/{}: file couldn't be accessed.", - PrintableString(namespace), PrintableString(sub_namespace)); + PrintableString(primary_namespace), PrintableString(secondary_namespace)); let msg = format!("Failed to list keys of {}/{}: file couldn't be accessed.", - PrintableString(namespace), PrintableString(sub_namespace)); + PrintableString(primary_namespace), PrintableString(secondary_namespace)); return Err(std::io::Error::new(std::io::ErrorKind::Other, msg)); } @@ -342,17 +342,17 @@ impl KVStore for FilesystemStore { } } else { debug_assert!(false, "Failed to list keys of {}/{}: file path is not valid UTF-8", - PrintableString(namespace), PrintableString(sub_namespace)); + PrintableString(primary_namespace), PrintableString(secondary_namespace)); let msg = format!("Failed to list keys of {}/{}: file path is not valid UTF-8", - PrintableString(namespace), PrintableString(sub_namespace)); + PrintableString(primary_namespace), PrintableString(secondary_namespace)); return Err(std::io::Error::new(std::io::ErrorKind::Other, msg)); } } Err(e) => { debug_assert!(false, "Failed to list keys of {}/{}: {}", - PrintableString(namespace), PrintableString(sub_namespace), e); + PrintableString(primary_namespace), PrintableString(secondary_namespace), e); let msg = format!("Failed to list keys of {}/{}: {}", - PrintableString(namespace), PrintableString(sub_namespace), e); + PrintableString(primary_namespace), PrintableString(secondary_namespace), e); return Err(std::io::Error::new(std::io::ErrorKind::Other, msg)); } } @@ -369,7 +369,6 @@ mod tests { use super::*; use crate::test_utils::{do_read_write_remove_list_persist, do_test_store}; - use bitcoin::hashes::hex::FromHex; use bitcoin::Txid; use lightning::chain::ChannelMonitorUpdateStatus; @@ -380,12 +379,7 @@ mod tests { use lightning::ln::functional_test_utils::*; use lightning::util::test_utils; use lightning::util::persist::read_channel_monitors; - use std::fs; - #[cfg(target_os = "windows")] - use { - lightning::get_event_msg, - lightning::ln::msgs::ChannelMessageHandler, - }; + use std::str::FromStr; impl Drop for FilesystemStore { fn drop(&mut self) { @@ -436,7 +430,7 @@ mod tests { } // Test that if the store's path to channel data is read-only, writing a - // monitor to it results in the store returning an InProgress. + // monitor to it results in the store returning an UnrecoverableError. // Windows ignores the read-only flag for folders, so this test is Unix-only. #[cfg(not(target_os = "windows"))] #[test] @@ -455,10 +449,10 @@ mod tests { check_closed_event!(nodes[1], 1, ClosureReason::HolderForceClosed, [nodes[0].node.get_our_node_id()], 100000); let mut added_monitors = nodes[1].chain_monitor.added_monitors.lock().unwrap(); let update_map = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap(); - let update_id = update_map.get(&added_monitors[0].0.to_channel_id()).unwrap(); + let update_id = update_map.get(&added_monitors[0].1.channel_id()).unwrap(); // Set the store's directory to read-only, which should result in - // returning a permanent failure when we then attempt to persist a + // returning an unrecoverable failure when we then attempt to persist a // channel update. let path = &store.get_data_dir(); let mut perms = fs::metadata(path).unwrap().permissions(); @@ -466,11 +460,11 @@ mod tests { fs::set_permissions(path, perms).unwrap(); let test_txo = OutPoint { - txid: Txid::from_hex("8984484a580b825b9972d7adb15050b3ab624ccd731946b3eeddb92f4e7ef6be").unwrap(), + txid: Txid::from_str("8984484a580b825b9972d7adb15050b3ab624ccd731946b3eeddb92f4e7ef6be").unwrap(), index: 0 }; match store.persist_new_channel(test_txo, &added_monitors[0].1, update_id.2) { - ChannelMonitorUpdateStatus::InProgress => {}, + ChannelMonitorUpdateStatus::UnrecoverableError => {}, _ => panic!("unexpected result from persisting new channel") } @@ -494,7 +488,7 @@ mod tests { check_closed_event!(nodes[1], 1, ClosureReason::HolderForceClosed, [nodes[0].node.get_our_node_id()], 100000); let mut added_monitors = nodes[1].chain_monitor.added_monitors.lock().unwrap(); let update_map = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap(); - let update_id = update_map.get(&added_monitors[0].0.to_channel_id()).unwrap(); + let update_id = update_map.get(&added_monitors[0].1.channel_id()).unwrap(); // Create the store with an invalid directory name and test that the // channel fails to open because the directories fail to be created. There @@ -503,11 +497,11 @@ mod tests { let store = FilesystemStore::new(":<>/".into()); let test_txo = OutPoint { - txid: Txid::from_hex("8984484a580b825b9972d7adb15050b3ab624ccd731946b3eeddb92f4e7ef6be").unwrap(), + txid: Txid::from_str("8984484a580b825b9972d7adb15050b3ab624ccd731946b3eeddb92f4e7ef6be").unwrap(), index: 0 }; match store.persist_new_channel(test_txo, &added_monitors[0].1, update_id.2) { - ChannelMonitorUpdateStatus::InProgress => {}, + ChannelMonitorUpdateStatus::UnrecoverableError => {}, _ => panic!("unexpected result from persisting new channel") }