make mvcc impl compile with new key module
Signed-off-by: Alex Chi <iskyzh@gmail.com>
This commit is contained in:
@@ -19,10 +19,10 @@ pub struct BlockBuilder {
|
||||
fn compute_overlap(first_key: KeySlice, key: KeySlice) -> usize {
|
||||
let mut i = 0;
|
||||
loop {
|
||||
if i >= first_key.len() || i >= key.len() {
|
||||
if i >= first_key.key_len() || i >= key.key_len() {
|
||||
break;
|
||||
}
|
||||
if first_key.raw_ref()[i] != key.raw_ref()[i] {
|
||||
if first_key.key_ref()[i] != key.key_ref()[i] {
|
||||
break;
|
||||
}
|
||||
i += 1;
|
||||
@@ -50,7 +50,7 @@ impl BlockBuilder {
|
||||
#[must_use]
|
||||
pub fn add(&mut self, key: KeySlice, value: &[u8]) -> bool {
|
||||
assert!(!key.is_empty(), "key must not be empty");
|
||||
if self.estimated_size() + key.len() + value.len() + SIZEOF_U16 * 3 /* key_len, value_len and offset */ > self.block_size
|
||||
if self.estimated_size() + key.raw_len() + value.len() + SIZEOF_U16 * 3 /* key_len, value_len and offset */ > self.block_size
|
||||
&& !self.is_empty()
|
||||
{
|
||||
return false;
|
||||
@@ -61,9 +61,11 @@ impl BlockBuilder {
|
||||
// Encode key overlap.
|
||||
self.data.put_u16(overlap as u16);
|
||||
// Encode key length.
|
||||
self.data.put_u16((key.len() - overlap) as u16);
|
||||
self.data.put_u16((key.key_len() - overlap) as u16);
|
||||
// Encode key content.
|
||||
self.data.put(&key.raw_ref()[overlap..]);
|
||||
self.data.put(&key.key_ref()[overlap..]);
|
||||
// Encode key ts
|
||||
self.data.put_u64(key.ts());
|
||||
// Encode value length.
|
||||
self.data.put_u16(value.len() as u16);
|
||||
// Encode value content.
|
||||
|
||||
@@ -27,9 +27,10 @@ impl Block {
|
||||
fn get_first_key(&self) -> KeyVec {
|
||||
let mut buf = &self.data[..];
|
||||
buf.get_u16();
|
||||
let key_len = buf.get_u16();
|
||||
let key = &buf[..key_len as usize];
|
||||
KeyVec::from_vec(key.to_vec())
|
||||
let key_len = buf.get_u16() as usize;
|
||||
let key = &buf[..key_len];
|
||||
buf.advance(key_len);
|
||||
KeyVec::from_vec_with_ts(key.to_vec(), buf.get_u64())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,11 +109,15 @@ impl BlockIterator {
|
||||
let key_len = entry.get_u16() as usize;
|
||||
let key = &entry[..key_len];
|
||||
self.key.clear();
|
||||
self.key.append(&self.first_key.raw_ref()[..overlap_len]);
|
||||
self.key.append(&self.first_key.key_ref()[..overlap_len]);
|
||||
self.key.append(key);
|
||||
entry.advance(key_len);
|
||||
let ts = entry.get_u64();
|
||||
self.key.set_ts(ts);
|
||||
let value_len = entry.get_u16() as usize;
|
||||
let value_offset_begin = offset + SIZEOF_U16 + SIZEOF_U16 + key_len + SIZEOF_U16;
|
||||
// REMEMBER TO CHANGE THIS every time you change the encoding!
|
||||
let value_offset_begin =
|
||||
offset + SIZEOF_U16 + SIZEOF_U16 + std::mem::size_of::<u64>() + key_len + SIZEOF_U16;
|
||||
let value_offset_end = value_offset_begin + value_len;
|
||||
self.value_range = (value_offset_begin, value_offset_end);
|
||||
entry.advance(value_len);
|
||||
|
||||
Reference in New Issue
Block a user