in common/rusty_leveldb_sgx/src/db_impl.rs [741:790]
fn write_l0_table(
&mut self,
memt: &MemTable,
ve: &mut VersionEdit,
base: Option<&Version>,
) -> Result<()> {
let start_ts = self.opt.env.micros();
let num = self.vset.borrow_mut().new_file_number();
log!(self.opt.log, "Start write of L0 table {:06}", num);
let fmd = build_table(&self.path, &self.opt, memt.iter(), num)?;
log!(self.opt.log, "L0 table {:06} has {} bytes", num, fmd.size);
// Wrote empty table.
if fmd.size == 0 {
self.vset.borrow_mut().reuse_file_number(num);
return Ok(());
}
let cache_result = self.cache.borrow_mut().get_table(num);
if let Err(e) = cache_result {
log!(
self.opt.log,
"L0 table {:06} not returned by cache: {}",
num,
e
);
let _ = self
.opt
.env
.delete(Path::new(&table_file_name(&self.path, num)));
return Err(e);
}
let mut stats = CompactionStats::default();
stats.micros = self.opt.env.micros() - start_ts;
stats.written = fmd.size;
let mut level = 0;
if let Some(b) = base {
level = b.pick_memtable_output_level(
parse_internal_key(&fmd.smallest).2,
parse_internal_key(&fmd.largest).2,
);
}
self.add_stats(level, stats);
ve.add_file(level, fmd);
Ok(())
}