@@ -85,25 +85,29 @@ impl Lsm {
8585 let memtable = c_mem. lock ( ) . unwrap ( ) ;
8686 let mut dense_index = c_den. lock ( ) . unwrap ( ) ;
8787
88- if memtable. len ( ) > 0 {
88+ if memtable. is_empty ( ) {
8989 if c_config. verbose {
90- logs ! ( "Flushing memtable to disk.. ." ) ;
90+ logs ! ( "No data to flush ." ) ;
9191 }
9292
93- let segments =
94- sstable :: Segment :: from_tree ( memtable . deref ( ) , c_config . sstable_path . as_str ( ) ) ;
93+ std :: process :: exit ( 0 ) ;
94+ }
9595
96- for token in segments . 1 {
97- dense_index . insert ( token . 0 , token . 1 ) ;
98- }
96+ if c_config . verbose {
97+ logs ! ( "Flushing memtable to disk..." ) ;
98+ }
9999
100- let mut keys = Vec :: new ( ) ;
100+ let segments =
101+ sstable:: Segment :: from_tree ( memtable. deref ( ) , c_config. sstable_path . as_str ( ) ) ;
101102
102- for segment in dense_index. deref ( ) {
103- keys. push ( segment. 0 . clone ( ) ) ;
104- }
105- } else if c_config. verbose {
106- logs ! ( "No data to flush." ) ;
103+ for token in segments. 1 {
104+ dense_index. insert ( token. 0 , token. 1 ) ;
105+ }
106+
107+ let mut keys = Vec :: new ( ) ;
108+
109+ for segment in dense_index. deref ( ) {
110+ keys. push ( segment. 0 . clone ( ) ) ;
107111 }
108112
109113 index:: write_index ( & c_config. sstable_path , dense_index. deref ( ) ) ;
@@ -205,16 +209,20 @@ impl Lsm {
205209 }
206210
207211 pub fn flush ( & mut self ) -> Result < ( ) > {
212+ let memtable = self . get_memtable ( ) ;
213+
208214 if self . lsm_config . verbose {
209215 logs ! ( "Flushing memtable to disk..." ) ;
210216 }
211217
218+ if memtable. is_empty ( ) {
219+ return Ok ( ( ) ) ;
220+ }
221+
212222 let mut dense_index = self . dense_index . lock ( ) . unwrap ( ) ;
213223
214- let segments = sstable:: Segment :: from_tree (
215- & self . get_memtable ( ) ,
216- self . lsm_config . sstable_path . as_str ( ) ,
217- ) ;
224+ let segments =
225+ sstable:: Segment :: from_tree ( & memtable, self . lsm_config . sstable_path . as_str ( ) ) ;
218226
219227 for token in segments. 1 {
220228 dense_index. insert ( token. 0 , token. 1 ) ;
@@ -298,27 +306,29 @@ impl Drop for Lsm {
298306 logs ! ( "LSM is being dropped." ) ;
299307 }
300308
301- if memtable. len ( ) > 0 {
309+ if memtable. is_empty ( ) {
302310 if self . lsm_config . verbose {
303- logs ! ( "Flushing memtable to disk." ) ;
311+ logs ! ( "No memtable to flush to disk." ) ;
304312 }
305313
306- let segments = sstable:: Segment :: from_tree (
307- memtable. deref ( ) ,
308- self . lsm_config . sstable_path . as_str ( ) ,
309- ) ;
314+ return ;
315+ }
310316
311- for token in segments . 1 {
312- dense_index . insert ( token . 0 , token . 1 ) ;
313- }
317+ if self . lsm_config . verbose {
318+ logs ! ( "Flushing memtable to disk." ) ;
319+ }
314320
315- let mut keys = Vec :: new ( ) ;
321+ let segments =
322+ sstable:: Segment :: from_tree ( memtable. deref ( ) , self . lsm_config . sstable_path . as_str ( ) ) ;
316323
317- for segment in dense_index. deref ( ) {
318- keys. push ( segment. 0 . clone ( ) ) ;
319- }
320- } else if self . lsm_config . verbose {
321- logs ! ( "No memtable to flush to disk." ) ;
324+ for token in segments. 1 {
325+ dense_index. insert ( token. 0 , token. 1 ) ;
326+ }
327+
328+ let mut keys = Vec :: new ( ) ;
329+
330+ for segment in dense_index. deref ( ) {
331+ keys. push ( segment. 0 . clone ( ) ) ;
322332 }
323333
324334 index:: write_index ( & self . lsm_config . sstable_path , dense_index. deref ( ) ) ;
0 commit comments