changeset 602:45b51fa84885

fix bug: largest key of sstable is the last key inserted into the table
author EmoFuncs <448947198@qq.com>
date Mon, 12 Jun 2023 09:44:03 +0800
parents 46620faa748d
children 6c504100f8f9
files src/db_impl.rs
diffstat 1 files changed, 4 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/db_impl.rs	Thu Jun 08 14:38:32 2023 +0800
+++ b/src/db_impl.rs	Mon Jun 12 09:44:03 2023 +0800
@@ -807,7 +807,7 @@
             // case.
             assert!(input.current(&mut key, &mut val));
             if cs.compaction.should_stop_before(&key) && cs.builder.is_some() {
-                self.finish_compaction_output(cs, key.clone())?;
+                self.finish_compaction_output(cs)?;
             }
             let (ktyp, seq, ukey) = parse_internal_key(&key);
             if seq == 0 {
@@ -861,17 +861,18 @@
             if cs.builder.as_ref().unwrap().entries() == 0 {
                 cs.current_output().smallest = key.clone();
             }
+            cs.current_output().largest = key.clone();
             cs.builder.as_mut().unwrap().add(&key, &val)?;
             // NOTE: Adjust max file size based on level.
             if cs.builder.as_ref().unwrap().size_estimate() > self.opt.max_file_size {
-                self.finish_compaction_output(cs, key.clone())?;
+                self.finish_compaction_output(cs)?;
             }
 
             input.advance();
         }
 
         if cs.builder.is_some() {
-            self.finish_compaction_output(cs, key)?;
+            self.finish_compaction_output(cs)?;
         }
 
         let mut stats = CompactionStats::default();
@@ -891,7 +892,6 @@
     fn finish_compaction_output(
         &mut self,
         cs: &mut CompactionState,
-        largest: Vec<u8>,
     ) -> Result<()> {
         assert!(cs.builder.is_some());
         let output_num = cs.current_output().num;
@@ -905,7 +905,6 @@
         let bytes = b.finish()?;
         cs.total_bytes += bytes;
 
-        cs.current_output().largest = largest;
         cs.current_output().size = bytes;
 
         if entries > 0 {