This is an automated email from the ASF dual-hosted git repository. mssun pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-teaclave.git
commit 67630008ee75b660ea86d96ae44e206eb91137b9 Author: sunhe05 <[email protected]> AuthorDate: Tue Nov 8 04:40:51 2022 +0000 LevelDB-SGX: omit SGX recovery files when traversing DB files --- common/rusty_leveldb_sgx/src/db_impl.rs | 20 ++++++++++++++++++-- common/rusty_leveldb_sgx/src/types.rs | 5 +++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/common/rusty_leveldb_sgx/src/db_impl.rs b/common/rusty_leveldb_sgx/src/db_impl.rs index e2d9aa3f..55629ac6 100644 --- a/common/rusty_leveldb_sgx/src/db_impl.rs +++ b/common/rusty_leveldb_sgx/src/db_impl.rs @@ -12,7 +12,7 @@ use crate::db_iter::DBIterator; use crate::cmp::{Cmp, InternalKeyCmp}; use crate::env::{Env, FileLock}; -use crate::error::{err, Result, StatusCode}; +use crate::error::{err, Result, Status, StatusCode}; use crate::filter::{BoxedFilterPolicy, InternalFilterPolicy}; use crate::infolog::Logger; use crate::key_types::{parse_internal_key, InternalKey, LookupKey, ValueType}; @@ -25,7 +25,7 @@ use crate::table_builder::TableBuilder; use crate::table_cache::{table_file_name, TableCache}; use crate::types::{ parse_file_name, share, FileMetaData, FileNum, FileType, LdbIterator, SequenceNumber, Shared, - MAX_SEQUENCE_NUMBER, NUM_LEVELS, + MAX_SEQUENCE_NUMBER, NUM_LEVELS, SGX_RECOVERY_FILE_SUFFIX, }; use crate::version::Version; use crate::version_edit::VersionEdit; @@ -191,6 +191,14 @@ impl DB { let mut log_files = vec![]; for file in &filenames { + if file + .to_str() + .ok_or_else(|| Status::new(StatusCode::InvalidArgument, "not valid UTF-8"))? + .ends_with(SGX_RECOVERY_FILE_SUFFIX) + { + continue; + } + match parse_file_name(&file) { Ok((num, typ)) => { expected.remove(&num); @@ -310,6 +318,14 @@ impl DB { let files = self.vset.borrow().live_files(); let filenames = self.opt.env.children(Path::new(&self.path))?; for name in filenames { + if name + .to_str() + .ok_or_else(|| Status::new(StatusCode::InvalidArgument, "not valid UTF-8"))? + .ends_with(SGX_RECOVERY_FILE_SUFFIX) + { + continue; + } + if let Ok((num, typ)) = parse_file_name(&name) { match typ { FileType::Log => { diff --git a/common/rusty_leveldb_sgx/src/types.rs b/common/rusty_leveldb_sgx/src/types.rs index b4da1d68..d05e58d5 100644 --- a/common/rusty_leveldb_sgx/src/types.rs +++ b/common/rusty_leveldb_sgx/src/types.rs @@ -10,6 +10,10 @@ use std::rc::Rc; pub const NUM_LEVELS: usize = 7; +// SGX protected fs saves the recovery file in the same directory as the original file. +// It should not be pared for db use. +pub static SGX_RECOVERY_FILE_SUFFIX: &str = "_recovery"; + /// Represents a sequence number of a single entry. pub type SequenceNumber = u64; @@ -211,5 +215,6 @@ pub mod tests { assert!(parse_file_name("01a.sst").is_err()); assert!(parse_file_name("0011.abc").is_err()); assert!(parse_file_name("MANIFEST-trolol").is_err()); + assert!(parse_file_name("000167.log_recovery").is_err()); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
