@@ -3,7 +3,7 @@ use std::{
33 collections:: HashSet ,
44 fs:: { self , File , OpenOptions , ReadDir } ,
55 io:: { BufWriter , Write } ,
6- mem:: swap,
6+ mem:: { swap, take } ,
77 ops:: RangeInclusive ,
88 path:: { Path , PathBuf } ,
99 sync:: atomic:: { AtomicBool , AtomicU32 , Ordering } ,
@@ -1003,8 +1003,6 @@ impl<S: ParallelScheduler, const FAMILIES: usize> TurboPersistence<S, FAMILIES>
10031003 Ok ( ( seq, file, meta) )
10041004 }
10051005
1006- let mut new_sst_files = Vec :: new ( ) ;
1007-
10081006 // Iterate all SST files
10091007 let iters = indicies
10101008 . iter ( )
@@ -1035,6 +1033,8 @@ impl<S: ParallelScheduler, const FAMILIES: usize> TurboPersistence<S, FAMILIES>
10351033 total_value_size : usize ,
10361034 last_entries : Vec < LookupEntry < ' l > > ,
10371035 last_entries_total_key_size : usize ,
1036+ new_sst_files :
1037+ Vec < ( u32 , File , StaticSortedFileBuilderMeta < ' static > ) > ,
10381038 }
10391039 let mut used_collector = Collector :: default ( ) ;
10401040 let mut unused_collector = Collector :: default ( ) ;
@@ -1084,7 +1084,7 @@ impl<S: ParallelScheduler, const FAMILIES: usize> TurboPersistence<S, FAMILIES>
10841084
10851085 let mut flags = MetaEntryFlags :: default ( ) ;
10861086 flags. set_cold ( !is_used) ;
1087- new_sst_files. push ( create_sst_file (
1087+ collector . new_sst_files . push ( create_sst_file (
10881088 & self . parallel_scheduler ,
10891089 & collector. entries ,
10901090 selected_total_key_size,
@@ -1132,7 +1132,7 @@ impl<S: ParallelScheduler, const FAMILIES: usize> TurboPersistence<S, FAMILIES>
11321132 sequence_number. fetch_add ( 1 , Ordering :: SeqCst ) + 1 ;
11331133
11341134 keys_written += collector. entries . len ( ) as u64 ;
1135- new_sst_files. push ( create_sst_file (
1135+ collector . new_sst_files . push ( create_sst_file (
11361136 & self . parallel_scheduler ,
11371137 & collector. entries ,
11381138 collector. total_key_size ,
@@ -1160,7 +1160,7 @@ impl<S: ParallelScheduler, const FAMILIES: usize> TurboPersistence<S, FAMILIES>
11601160 sequence_number. fetch_add ( 1 , Ordering :: SeqCst ) + 1 ;
11611161
11621162 keys_written += part1. len ( ) as u64 ;
1163- new_sst_files. push ( create_sst_file (
1163+ collector . new_sst_files . push ( create_sst_file (
11641164 & self . parallel_scheduler ,
11651165 part1,
11661166 // We don't know the exact sizes so we estimate them
@@ -1171,7 +1171,7 @@ impl<S: ParallelScheduler, const FAMILIES: usize> TurboPersistence<S, FAMILIES>
11711171 ) ?) ;
11721172
11731173 keys_written += part2. len ( ) as u64 ;
1174- new_sst_files. push ( create_sst_file (
1174+ collector . new_sst_files . push ( create_sst_file (
11751175 & self . parallel_scheduler ,
11761176 part2,
11771177 collector. last_entries_total_key_size / 2 ,
@@ -1181,6 +1181,8 @@ impl<S: ParallelScheduler, const FAMILIES: usize> TurboPersistence<S, FAMILIES>
11811181 ) ?) ;
11821182 }
11831183 }
1184+ let mut new_sst_files = take ( & mut unused_collector. new_sst_files ) ;
1185+ new_sst_files. append ( & mut used_collector. new_sst_files ) ;
11841186 Ok ( PartialMergeResult :: Merged {
11851187 new_sst_files,
11861188 blob_seq_numbers_to_delete,
0 commit comments