@@ -19,6 +19,7 @@ pub struct SsTableBuilder {
|
||||
pub(crate) meta: Vec<BlockMeta>,
|
||||
block_size: usize,
|
||||
key_hashes: Vec<u32>,
|
||||
max_ts: u64,
|
||||
}
|
||||
|
||||
impl SsTableBuilder {
|
||||
@@ -32,6 +33,7 @@ impl SsTableBuilder {
|
||||
block_size,
|
||||
builder: BlockBuilder::new(block_size),
|
||||
key_hashes: Vec::new(),
|
||||
max_ts: 0,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,6 +43,9 @@ impl SsTableBuilder {
|
||||
self.first_key.set_from_slice(key);
|
||||
}
|
||||
|
||||
if key.ts() > self.max_ts {
|
||||
self.max_ts = key.ts();
|
||||
}
|
||||
self.key_hashes.push(farmhash::fingerprint32(key.key_ref()));
|
||||
|
||||
if self.builder.add(key, value) {
|
||||
@@ -85,7 +90,7 @@ impl SsTableBuilder {
|
||||
self.finish_block();
|
||||
let mut buf = self.data;
|
||||
let meta_offset = buf.len();
|
||||
BlockMeta::encode_block_meta(&self.meta, &mut buf);
|
||||
BlockMeta::encode_block_meta(&self.meta, self.max_ts, &mut buf);
|
||||
buf.put_u32(meta_offset as u32);
|
||||
let bloom = Bloom::build_from_key_hashes(
|
||||
&self.key_hashes,
|
||||
@@ -104,6 +109,7 @@ impl SsTableBuilder {
|
||||
block_meta_offset: meta_offset,
|
||||
block_cache,
|
||||
bloom: Some(bloom),
|
||||
max_ts: self.max_ts,
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user