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());