Mercurial > lbo > hg > leveldb-rs
changeset 307:443bf10ac7a5
db_impl: Add another test for trivial moves and memtable compaction.
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Wed, 27 Sep 2017 20:39:27 +0200 |
parents | e36fd18488c1 |
children | f13752b9daf8 |
files | src/db_impl.rs |
diffstat | 1 files changed, 37 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/db_impl.rs Wed Sep 27 20:39:09 2017 +0200 +++ b/src/db_impl.rs Wed Sep 27 20:39:27 2017 +0200 @@ -978,6 +978,40 @@ } #[test] + fn test_db_impl_compaction_trivial_move() { + let mut db = DB::open("db", options::for_test()).unwrap(); + + db.put("abc".as_bytes(), "xyz".as_bytes()).unwrap(); + db.put("ab3".as_bytes(), "xyz".as_bytes()).unwrap(); + db.put("ab0".as_bytes(), "xyz".as_bytes()).unwrap(); + db.put("abz".as_bytes(), "xyz".as_bytes()).unwrap(); + assert_eq!(4, db.mem.len()); + let mut imm = MemTable::new(db.opt.cmp.clone()); + mem::swap(&mut imm, &mut db.mem); + db.imm = Some(imm); + db.compact_memtable().unwrap(); + + println!("children after: {:?}", + db.opt.env.children(Path::new("db/")).unwrap()); + assert!(db.opt.env.exists(Path::new("db/000004.ldb")).unwrap()); + + { + let v = db.vset.current(); + let mut v = v.borrow_mut(); + v.file_to_compact = Some(v.files[2][0].clone()); + v.file_to_compact_lvl = 2; + } + + db.maybe_do_compaction().unwrap(); + + { + let v = db.vset.current(); + let v = v.borrow_mut(); + assert_eq!(1, v.files[3].len()); + } + } + + #[test] fn test_db_impl_build_table() { let mut opt = options::for_test(); opt.block_size = 128; @@ -1048,7 +1082,7 @@ db.vset.add_version(v); db.vset.next_file_num = 10; - db.start_compaction(); + db.start_compaction().unwrap(); assert!(!opt.env.exists(Path::new("db/000003.ldb")).unwrap()); assert!(opt.env.exists(Path::new("db/000010.ldb")).unwrap()); @@ -1071,7 +1105,8 @@ db.vset.add_version(v); db.vset.next_file_num = 10; - db.start_compaction(); + db.start_compaction().unwrap(); + assert!(opt.env.exists(Path::new("db/000006.ldb")).unwrap()); assert!(!opt.env.exists(Path::new("db/000010.ldb")).unwrap()); assert_eq!(218, opt.env.size_of(Path::new("db/000006.ldb")).unwrap());