Skip to content

Commit 9a4c61c

Browse files
committed
Change SegRef structure
From {ra:range(), list()} -> {binary(), ra:range()}
1 parent db53b56 commit 9a4c61c

File tree

8 files changed

+126
-122
lines changed

8 files changed

+126
-122
lines changed

docs/internals/COMPACTION.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ higher numbered segments (003, 004) will then have a symlink created (e.g. 003.l
7575
pointing to the lowest numbered segment (002)
7676
then the link is renamed to the source file: `003.link -> 003` (NB not atomic).
7777

78-
`002-003-004.compacting` is then deleted (but 002 is still hard linked so the data
78+
`001-002-003.compacting` is then deleted (but 002 is still hard linked so the data
7979
will remain).
8080

8181
This naming format means it is easy to identify partially compacted segments

src/ra_log.erl

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
-define(WAL_RESEND_TIMEOUT, 5000).
6565

6666
-type ra_meta_key() :: atom().
67-
-type segment_ref() :: {ra_range:range(), File :: file:filename_all()}.
67+
-type segment_ref() :: {File :: binary(), ra_range:range()}.
6868
-type event_body() :: {written, ra_term(), ra_seq:state()} |
6969
{segments, [{ets:tid(), ra:range()}], [segment_ref()]} |
7070
{resend_write, ra_index()} |
@@ -234,13 +234,13 @@ init(#{uid := UId,
234234
%% TODO: check ra_range:add/2 actually performas the correct logic we expect
235235
Range = ra_range:add(MtRange, SegmentRange),
236236

237-
%% TODO: review this
237+
%% TODO: review thi
238238
[begin
239239
?DEBUG("~ts: deleting overwritten segment ~w",
240240
[LogId, SR]),
241241
catch prim_file:delete(filename:join(Dir, F))
242242
end
243-
|| {_, F} = SR <- SegRefs -- ra_log_segments:segment_refs(Reader)],
243+
|| {F, _} = SR <- SegRefs -- ra_log_segments:segment_refs(Reader)],
244244

245245
%% assert there is no gap between the snapshot
246246
%% and the first index in the log
@@ -813,7 +813,7 @@ handle_event({segments, TidRanges, NewSegs},
813813
[LogId, SR]),
814814
catch prim_file:delete(filename:join(Dir, F))
815815
end
816-
|| {_, F} = SR <- OverwrittenSegRefs],
816+
|| {F, _} = SR <- OverwrittenSegRefs],
817817
ok
818818
end,
819819
{State, [{bg_work, Fun, fun (_Err) -> ok end}]};
@@ -833,12 +833,12 @@ handle_event({segments_to_be_deleted, SegRefs},
833833
%% open a new segment with the new max open segment value
834834
Fun = fun () ->
835835
[prim_file:delete(filename:join(Dir, F))
836-
|| {_, F} <- SegRefs],
836+
|| {F, _} <- SegRefs],
837837
ok
838838
end,
839839
{State#?MODULE{reader = ra_log_segments:init(UId, Dir, MaxOpenSegments,
840-
random,
841-
ActiveSegs, Names, Counter)},
840+
random,
841+
ActiveSegs, Names, Counter)},
842842

843843
[{bg_work, Fun, fun (_Err) -> ok end}]};
844844
handle_event({snapshot_written, {SnapIdx, _} = Snap, LiveIndexes, SnapKind},
@@ -1337,7 +1337,7 @@ schedule_compaction(SnapIdx, #?MODULE{cfg = #cfg{uid = _UId,
13371337
%% never compact the current segment
13381338
%% only take those who have a range lower than the snapshot index as
13391339
%% we never want to compact more than that
1340-
SegRefs = lists:takewhile(fun ({{_Start, End}, _}) ->
1340+
SegRefs = lists:takewhile(fun ({_Fn, {_Start, End}}) ->
13411341
End =< SnapIdx
13421342
end, lists:reverse(Compactable)),
13431343
% SnapDir = ra_snapshot:current_snapshot_dir(SnapState),
@@ -1348,12 +1348,8 @@ schedule_compaction(SnapIdx, #?MODULE{cfg = #cfg{uid = _UId,
13481348
Self = self(),
13491349
Fun =
13501350
fun () ->
1351-
% {ok, Indexes} = ra_snapshot:indexes(SnapDir),
1352-
1353-
%% get all current segrefs
1354-
% AllSegRefs = my_segrefs(UId, SegWriter),
13551351
Delete = lists:foldl(
1356-
fun({Range, _} = S, Del) ->
1352+
fun({_Fn, Range} = S, Del) ->
13571353
case ra_seq:in_range(Range,
13581354
LiveIndexes) of
13591355
[] ->

src/ra_log_segment.erl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,7 @@ segref(#state{range = undefined}) ->
446446
undefined;
447447
segref(#state{range = Range,
448448
cfg = #cfg{filename = Fn}}) ->
449-
{Range, filename:basename(Fn)};
449+
{ra_lib:to_binary(filename:basename(Fn)), Range};
450450
segref(Filename) ->
451451
{ok, Seg} = open(Filename, #{mode => read}),
452452
SegRef = segref(Seg),

src/ra_log_segment_writer.erl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ handle_cast({mem_tables, UIdTidRanges, WalFile},
183183
"~s in ~bms",
184184
[System, length(RangesList), WalFile, Diff]),
185185
{noreply, State};
186-
handle_cast({truncate_segments, Who, {_Range, Name} = SegRef},
186+
handle_cast({truncate_segments, Who, {Name, _Range} = SegRef},
187187
#state{segment_conf = SegConf,
188188
system = System} = State0) ->
189189
%% remove all segments below the provided SegRef
@@ -192,7 +192,7 @@ handle_cast({truncate_segments, Who, {_Range, Name} = SegRef},
192192
Files = segments_for(Who, State0),
193193
{_Keep, Discard} = lists:splitwith(
194194
fun (F) ->
195-
ra_lib:to_string(filename:basename(F)) =/= Name
195+
ra_lib:to_binary(filename:basename(F)) =/= Name
196196
end, lists:reverse(Files)),
197197
case Discard of
198198
[] ->
@@ -303,7 +303,7 @@ flush_mem_table_ranges({ServerUId, TidSeqs0},
303303
%% order they are kept by the ra_log
304304
SegRefs = lists:reverse(
305305
lists:foldl(
306-
fun ({_, FILE}, [{_, FILE} | _] = Acc) ->
306+
fun ({FILE, _}, [{FILE, _} | _] = Acc) ->
307307
Acc;
308308
(Seg, Acc) ->
309309
[Seg | Acc]

0 commit comments

Comments
 (0)