|
13 | 13 | init/7, |
14 | 14 | close/1, |
15 | 15 | update_segments/2, |
16 | | - handle_compaction/2, |
| 16 | + handle_compaction_result/2, |
17 | 17 | segment_refs/1, |
18 | 18 | segment_ref_count/1, |
19 | 19 | range/1, |
@@ -138,23 +138,30 @@ update_segments(NewSegmentRefs, |
138 | 138 | OverwrittenSegments}. |
139 | 139 |
|
140 | 140 | -record(log_compaction_result, |
141 | | - {%range :: ra:range(), |
142 | | - unreferenced :: [segment_ref()], |
| 141 | + {unreferenced :: [segment_ref()], |
143 | 142 | linked :: [segment_ref()], |
144 | 143 | compacted :: [segment_ref()]}). |
145 | 144 |
|
146 | | --spec handle_compaction(#log_compaction_result{}, state()) -> state(). |
147 | | -handle_compaction(#log_compaction_result{unreferenced = Deleted, |
148 | | - linked = Linked, |
149 | | - compacted = Compacted}, |
150 | | - #?STATE{open_segments = Open0, |
151 | | - segment_refs = SegRefs0} = State) -> |
| 145 | +-spec handle_compaction_result(#log_compaction_result{}, state()) -> |
| 146 | + {state(), [ra_server:effect()]}. |
| 147 | +handle_compaction_result(#log_compaction_result{unreferenced = Unreferenced, |
| 148 | + linked = Linked, |
| 149 | + compacted = Compacted}, |
| 150 | + #?STATE{cfg = #cfg{directory = Dir}, |
| 151 | + open_segments = Open0, |
| 152 | + segment_refs = SegRefs0} = State) -> |
152 | 153 | SegmentRefs0 = ra_lol:to_list(SegRefs0), |
153 | | - SegmentRefs = lists:usort(((SegmentRefs0 -- Deleted) -- Linked) ++ Compacted), |
| 154 | + SegmentRefs = lists:usort(((SegmentRefs0 -- Unreferenced) -- Linked) ++ Compacted), |
154 | 155 | Open = ra_flru:evict_all(Open0), |
155 | | - State#?MODULE{segment_refs = ra_lol:from_list(fun seg_ref_gt/2, |
156 | | - lists:reverse(SegmentRefs)), |
157 | | - open_segments = Open}. |
| 156 | + Fun = fun () -> |
| 157 | + [prim_file:delete(filename:join(Dir, F)) |
| 158 | + || {F, _} <- Unreferenced], |
| 159 | + ok |
| 160 | + end, |
| 161 | + {State#?MODULE{segment_refs = ra_lol:from_list(fun seg_ref_gt/2, |
| 162 | + lists:reverse(SegmentRefs)), |
| 163 | + open_segments = Open}, |
| 164 | + [{bg_work, Fun, fun (_Err) -> ok end}]}. |
158 | 165 |
|
159 | 166 |
|
160 | 167 | -spec update_first_index(ra_index(), state()) -> |
|
0 commit comments