Skip to content

Commit c33a9d8

Browse files
committed
upgrade value-log
to use Slice::from_reader
1 parent 15d46a4 commit c33a9d8

File tree

6 files changed

+14
-22
lines changed

6 files changed

+14
-22
lines changed

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
name = "lsm-tree"
33
description = "A K.I.S.S. implementation of log-structured merge trees (LSM-trees/LSMTs)"
44
license = "MIT OR Apache-2.0"
5-
version = "2.3.2"
5+
version = "2.3.3"
66
edition = "2021"
77
rust-version = "1.74.0"
88
readme = "README.md"
@@ -37,7 +37,7 @@ quick_cache = { version = "0.6.5", default-features = false, features = [] }
3737
rustc-hash = "2.0.0"
3838
self_cell = "1.0.4"
3939
tempfile = "3.12.0"
40-
value-log = "1.1.1"
40+
value-log = "1.2.0"
4141
varint-rs = "2.2.0"
4242
xxhash-rust = { version = "0.8.12", features = ["xxh3"] }
4343

src/blob_tree/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,8 @@ impl AbstractTree for BlobTree {
326326
if item.is_tombstone() {
327327
// NOTE: Still need to add tombstone to index tree
328328
// But no blob to blob writer
329+
330+
// TODO: Slice::empty
329331
segment_writer.write(InternalValue::new(item.key, vec![]))?;
330332
continue;
331333
}

src/blob_tree/value.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,8 @@ impl Decode for MaybeInlineValue {
7070
match tag {
7171
TAG_INLINE => {
7272
let len = reader.read_u32_varint()? as usize;
73-
let mut bytes = vec![0; len];
74-
reader.read_exact(&mut bytes)?;
75-
Ok(Self::Inline(Slice::from(bytes)))
73+
let slice = Slice::from_reader(reader, len)?;
74+
Ok(Self::Inline(slice))
7675
}
7776
TAG_INDIRECT => {
7877
let vhandle = ValueHandle::decode_from(reader)?;

src/key.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use std::{
1111
cmp::Reverse,
1212
io::{Read, Write},
1313
};
14+
use value_log::Slice;
1415
use varint_rs::{VarintReader, VarintWriter};
1516

1617
#[derive(Clone, PartialEq, Eq)]
@@ -43,7 +44,7 @@ impl InternalKey {
4344

4445
assert!(
4546
user_key.len() <= u16::MAX.into(),
46-
"keys can be 65535 bytes in length"
47+
"keys can be 65535 bytes in length",
4748
);
4849

4950
Self {
@@ -83,8 +84,7 @@ impl Decode for InternalKey {
8384
.map_err(|()| DecodeError::InvalidTag(("ValueType", value_type)))?;
8485

8586
let key_len = reader.read_u16_varint()?;
86-
let mut key = vec![0; key_len.into()];
87-
reader.read_exact(&mut key)?;
87+
let key = Slice::from_reader(reader, key_len.into())?;
8888

8989
Ok(Self::new(key, seqno, value_type))
9090
}

src/key_range.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -160,14 +160,10 @@ impl Encode for KeyRange {
160160
impl Decode for KeyRange {
161161
fn decode_from<R: Read>(reader: &mut R) -> Result<Self, DecodeError> {
162162
let key_min_len = reader.read_u16::<BigEndian>()?;
163-
let mut key_min = vec![0; key_min_len.into()];
164-
reader.read_exact(&mut key_min)?;
165-
let key_min: UserKey = Slice::from(key_min);
163+
let key_min: UserKey = Slice::from_reader(reader, key_min_len.into())?;
166164

167165
let key_max_len = reader.read_u16::<BigEndian>()?;
168-
let mut key_max = vec![0; key_max_len.into()];
169-
reader.read_exact(&mut key_max)?;
170-
let key_max: UserKey = Slice::from(key_max);
166+
let key_max: UserKey = Slice::from_reader(reader, key_max_len.into())?;
171167

172168
Ok(Self::new((key_min, key_max)))
173169
}

src/value.rs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,6 @@ impl InternalValue {
117117
///
118118
/// Panics if the key length is empty or greater than 2^16.
119119
pub fn new_tombstone<K: Into<UserKey>>(key: K, seqno: u64) -> Self {
120-
let key = key.into();
121120
let key = InternalKey::new(key, seqno, ValueType::Tombstone);
122121
Self::new(key, vec![])
123122
}
@@ -128,7 +127,6 @@ impl InternalValue {
128127
///
129128
/// Panics if the key length is empty or greater than 2^16.
130129
pub fn new_weak_tombstone<K: Into<UserKey>>(key: K, seqno: u64) -> Self {
131-
let key = key.into();
132130
let key = InternalKey::new(key, seqno, ValueType::WeakTombstone);
133131
Self::new(key, vec![])
134132
}
@@ -187,19 +185,16 @@ impl Decode for InternalValue {
187185
if key.is_tombstone() {
188186
Ok(Self {
189187
key,
188+
// TODO: Slice::empty()
190189
value: vec![].into(),
191190
})
192191
} else {
193192
// NOTE: Only read value if we are actually a value
194193

195194
let value_len = reader.read_u32_varint()?;
196-
let mut value = vec![0; value_len as usize];
197-
reader.read_exact(&mut value)?;
195+
let value = Slice::from_reader(reader, value_len as usize)?;
198196

199-
Ok(Self {
200-
key,
201-
value: value.into(),
202-
})
197+
Ok(Self { key, value })
203198
}
204199
}
205200
}

0 commit comments

Comments
 (0)