in common/rusty_leveldb_sgx/src/db_impl.rs [441:485]
fn get_internal(&mut self, seq: SequenceNumber, key: &[u8]) -> Result<Option<Vec<u8>>> {
// Using this lookup key will skip all entries with higher sequence numbers, because they
// will compare "Lesser" using the InternalKeyCmp
let lkey = LookupKey::new(key, seq);
match self.mem.get(&lkey) {
(Some(v), _) => return Ok(Some(v)),
// deleted entry
(None, true) => return Ok(None),
// not found entry
(None, false) => {}
}
if let Some(imm) = self.imm.as_ref() {
match imm.get(&lkey) {
(Some(v), _) => return Ok(Some(v)),
// deleted entry
(None, true) => return Ok(None),
// not found entry
(None, false) => {}
}
}
let mut do_compaction = false;
let mut result = None;
// Limiting the borrow scope of self.current.
{
let current = self.current();
let mut current = current.borrow_mut();
if let Ok(Some((v, st))) = current.get(lkey.internal_key()) {
if current.update_stats(st) {
do_compaction = true;
}
result = Some(v)
}
}
if do_compaction {
if let Err(e) = self.maybe_do_compaction() {
log!(self.opt.log, "error while doing compaction in get: {}", e);
}
}
Ok(result)
}