Skip to content

Commit b13920d

Browse files
committed
wip
1 parent 9a4c61c commit b13920d

File tree

3 files changed

+21
-16
lines changed

3 files changed

+21
-16
lines changed

src/ra_log.erl

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1340,8 +1340,6 @@ schedule_compaction(SnapIdx, #?MODULE{cfg = #cfg{uid = _UId,
13401340
SegRefs = lists:takewhile(fun ({_Fn, {_Start, End}}) ->
13411341
End =< SnapIdx
13421342
end, lists:reverse(Compactable)),
1343-
% SnapDir = ra_snapshot:current_snapshot_dir(SnapState),
1344-
13451343
%% TODO: minor compactions should also delete / truncate
13461344
%% segments with completely overwritten indexes
13471345

src/ra_log_segments.erl

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
init/7,
1414
close/1,
1515
update_segments/2,
16-
handle_compaction/2,
16+
handle_compaction_result/2,
1717
segment_refs/1,
1818
segment_ref_count/1,
1919
range/1,
@@ -138,23 +138,30 @@ update_segments(NewSegmentRefs,
138138
OverwrittenSegments}.
139139

140140
-record(log_compaction_result,
141-
{%range :: ra:range(),
142-
unreferenced :: [segment_ref()],
141+
{unreferenced :: [segment_ref()],
143142
linked :: [segment_ref()],
144143
compacted :: [segment_ref()]}).
145144

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) ->
152153
SegmentRefs0 = ra_lol:to_list(SegRefs0),
153-
SegmentRefs = lists:usort(((SegmentRefs0 -- Deleted) -- Linked) ++ Compacted),
154+
SegmentRefs = lists:usort(((SegmentRefs0 -- Unreferenced) -- Linked) ++ Compacted),
154155
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}]}.
158165

159166

160167
-spec update_first_index(ra_index(), state()) ->

src/ra_server.erl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@
178178
%% used for tracking valid leader messages
179179
{record_leader_msg, ra_server_id()} |
180180
start_election_timeout |
181-
{bg_work, fun(() -> ok) | mfargs()}.
181+
{bg_work, fun(() -> ok) | mfargs(), fun()}.
182182

183183
-type effects() :: [effect()].
184184

0 commit comments

Comments
 (0)