Mercurial > lbo > hg > leveldb-rs
changeset 305:08c87265d313
db_impl: Finish writing logic
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Wed, 27 Sep 2017 20:37:21 +0200 |
parents | d903e81666e7 |
children | e36fd18488c1 |
files | src/db_impl.rs |
diffstat | 1 files changed, 12 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/db_impl.rs Wed Sep 27 20:35:54 2017 +0200 +++ b/src/db_impl.rs Wed Sep 27 20:37:21 2017 +0200 @@ -340,26 +340,36 @@ impl DB { // WRITE // + /// put adds a single entry. fn put(&mut self, k: &[u8], v: &[u8]) -> Result<()> { let mut wb = WriteBatch::new(); wb.put(k, v); self.write(wb, false) } + /// write writes an entire WriteBatch. sync determines whether the write should be flushed to + /// disk. fn write(&mut self, batch: WriteBatch, sync: bool) -> Result<()> { assert!(self.log.is_some()); let entries = batch.count() as u64; let log = self.log.as_mut().unwrap(); + let next = self.vset.last_seq + 1; - log.add_record(&batch.encode(self.vset.last_seq + 1))?; + batch.insert_into_memtable(next, &mut self.mem); + log.add_record(&batch.encode(next))?; if sync { log.flush()?; } - self.vset.last_seq += entries; Ok(()) } + + /// flush makes sure that all pending changes (e.g. from put()) are stored on disk. + fn flush(&mut self) -> Result<()> { + assert!(self.log.is_some()); + self.log.as_mut().unwrap().flush() + } } impl DB {