From f19c7e6a41768e73a0f727deb22d65f1646a0777 Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Wed, 8 Jan 2025 10:12:19 +0200 Subject: Replace iter() calls with into_iter(), add consistency asserts --- log_db/src/common.rs | 26 -------------------------- log_db/src/lib.rs | 36 ++++++++++++++++++++---------------- log_db/src/record.rs | 2 ++ 3 files changed, 22 insertions(+), 42 deletions(-) (limited to 'log_db') diff --git a/log_db/src/common.rs b/log_db/src/common.rs index 8bdcd9a..1841175 100644 --- a/log_db/src/common.rs +++ b/log_db/src/common.rs @@ -104,22 +104,6 @@ impl LogKeySet { LogKeySet { set } } - pub fn from_slice(keys: &[LogKey]) -> Self { - assert!( - !keys.is_empty(), - "LogKeySet::from_slice must be supplied a non-empty slice" - ); - let mut set = HashSet::with_capacity(keys.len()); - keys.iter().for_each(|key| { - set.insert(key.clone()); - }); - LogKeySet { set } - } - - pub fn iter(&self) -> std::collections::hash_set::Iter<'_, LogKey> { - self.set.iter() - } - pub fn contains(&self, key: &LogKey) -> bool { self.set.contains(key) } @@ -784,13 +768,3 @@ pub fn request_exclusive_lock(data_dir: &Path, file: &mut fs::File) -> Result<() Ok(()) } - -macro_rules! dbg_trace { - ($($args: expr),*) => { - print!("TRACE: file: {}, line: {}", file!(), line!()); - $( - print!(", {}: {:?}", stringify!($args), $args); - )* - println!(""); // to get a new line at the end - } -} diff --git a/log_db/src/lib.rs b/log_db/src/lib.rs index 4d9b82f..eb9cfe9 100644 --- a/log_db/src/lib.rs +++ b/log_db/src/lib.rs @@ -383,6 +383,8 @@ impl DB { let serialized = &record.serialize(); let record_offset = self.active_data_file.seek(SeekFrom::End(0))?; let record_length = serialized.len() as u64; + assert!(record_length > 0); + self.active_data_file.write_all(serialized)?; // Flush and sync data to disk @@ -400,8 +402,8 @@ impl DB { // Write the record metadata to the metadata file let mut metadata_buf = vec![]; - metadata_buf.extend(&record_offset.to_be_bytes()); - metadata_buf.extend(&record_length.to_be_bytes()); + metadata_buf.extend(record_offset.to_be_bytes().into_iter()); + metadata_buf.extend(record_length.to_be_bytes().into_iter()); assert_eq!(metadata_buf.len(), 16); self.active_metadata_file.write_all(&metadata_buf)?; @@ -429,11 +431,11 @@ impl DB { // These post-condition asserts are commented out since they seemed // to sometimes report false positives. // - // let len = self.active_metadata_file.seek(SeekFrom::End(0))?; - // assert!(len >= METADATA_FILE_HEADER_SIZE as u64); - // assert_eq!((len - METADATA_FILE_HEADER_SIZE as u64) % 16, 0); - // let data_file_len = self.active_data_file.seek(SeekFrom::End(0))?; - // assert_eq!(data_file_len, record_offset + record_length); + let len = self.active_metadata_file.seek(SeekFrom::End(0))?; + assert!(len >= METADATA_FILE_HEADER_SIZE as u64); + assert_eq!((len - METADATA_FILE_HEADER_SIZE as u64) % 16, 0); + let data_file_len = self.active_data_file.seek(SeekFrom::End(0))?; + assert_eq!(data_file_len, record_offset + record_length); Ok(()) } @@ -497,6 +499,7 @@ impl DB { let data_offset = u64::from_be_bytes(metadata_buf[0..8].try_into().unwrap()); let data_length = u64::from_be_bytes(metadata_buf[8..16].try_into().unwrap()); + assert!(data_length > 0); let data_path = &self.data_dir.join(metadata_header.uuid.to_string()); let mut data_file = READ_MODE.open(&data_path)?; @@ -585,7 +588,7 @@ impl DB { debug!("Found log keys in secondary memtable: {:?}", log_keys); let mut records = vec![]; - for log_key in log_keys.iter() { + for log_key in log_keys.into_iter() { // TODO optimize this so that a given segment is only opened once per find_by, and not for every log key let segment_num = log_key.segment_num(); let segment_index = log_key.index(); @@ -606,6 +609,7 @@ impl DB { let data_offset = u64::from_be_bytes(metadata_buf[0..8].try_into().unwrap()); let data_length = u64::from_be_bytes(metadata_buf[8..16].try_into().unwrap()); + assert!(data_length > 0); let data_path = &self.data_dir.join(metadata_header.uuid.to_string()); let mut data_file = READ_MODE.open(&data_path)?; @@ -699,8 +703,8 @@ impl DB { } let mut metadata_entry = vec![]; - metadata_entry.extend(offset.to_be_bytes().iter()); - metadata_entry.extend(length.to_be_bytes().iter()); + metadata_entry.extend(offset.to_be_bytes().into_iter()); + metadata_entry.extend(length.to_be_bytes().into_iter()); self.active_metadata_file.write_all(&metadata_entry)?; @@ -755,8 +759,8 @@ impl DB { } let mut metadata_entry = vec![]; - metadata_entry.extend(offset.to_be_bytes().iter()); - metadata_entry.extend(length.to_be_bytes().iter()); + metadata_entry.extend(offset.to_be_bytes().into_iter()); + metadata_entry.extend(length.to_be_bytes().into_iter()); self.active_metadata_file.write_all(&metadata_entry)?; @@ -867,11 +871,11 @@ impl DB { let metadata_offset = original_index * 16; - for (i, byte) in offset.to_be_bytes().iter().enumerate() { - metadata_rows_buf[metadata_offset + i] = *byte; + for (i, byte) in offset.to_be_bytes().into_iter().enumerate() { + metadata_rows_buf[metadata_offset + i] = byte; } - for (i, byte) in len.to_be_bytes().iter().enumerate() { - metadata_rows_buf[metadata_offset + 8 + i] = *byte; + for (i, byte) in len.to_be_bytes().into_iter().enumerate() { + metadata_rows_buf[metadata_offset + 8 + i] = byte; } offset += len; diff --git a/log_db/src/record.rs b/log_db/src/record.rs index 8d518f0..61939e1 100644 --- a/log_db/src/record.rs +++ b/log_db/src/record.rs @@ -23,6 +23,8 @@ impl Record { } pub fn deserialize(bytes: &[u8]) -> Record { + assert!(bytes.len() > 0); + let mut values = Vec::new(); let tombstone = bytes[0] == B_TOMBSTONE; -- cgit v1.3