@@ -19,29 +19,35 @@ pub fn optimize_region_file(
1919 let chunks = region. get_chunks ( ) ;
2020 result. total_chunks += chunks. len ( ) ;
2121
22- let mut chunks_to_delete = Vec :: new ( ) ;
23- for chunk in chunks {
24- if chunk. should_delete ( ) {
25- chunks_to_delete. push ( chunk. clone ( ) ) ;
22+ if write {
23+ let mut chunks_to_delete = Vec :: new ( ) ;
24+ for chunk in chunks {
25+ if chunk. should_delete ( ) {
26+ chunks_to_delete. push ( chunk. clone ( ) ) ;
27+ }
2628 }
27- }
28- result. deleted_chunks += chunks_to_delete. len ( ) ;
29+ result. deleted_chunks += chunks_to_delete. len ( ) ;
2930
30- for chunk in & chunks_to_delete {
31- region. remove_chunk ( chunk) ;
32- }
31+ for chunk in & chunks_to_delete {
32+ region. remove_chunk ( chunk) ;
33+ }
3334
34- if region. is_empty ( ) {
35- result. deleted_regions += 1 ;
36- if write {
35+ if region. is_empty ( ) {
36+ result. deleted_regions += 1 ;
3737 std:: fs:: remove_file ( region_file_path) ?;
38+ } else {
39+ let bytes = region. to_bytes ( ) ;
40+ std:: fs:: write ( region_file_path, bytes) ?;
41+ }
42+ } else {
43+ for chunk in chunks {
44+ if chunk. should_delete ( ) {
45+ result. deleted_chunks += 1 ;
46+ }
47+ }
48+ if result. deleted_chunks >= result. total_chunks {
49+ result. deleted_regions += 1 ;
3850 }
39- return Ok ( result) ;
40- }
41-
42- if write {
43- let bytes = region. to_bytes ( ) ;
44- std:: fs:: write ( region_file_path, bytes) ?;
4551 }
4652 }
4753 Err ( _) => {
0 commit comments