Skip to content

Commit e6656df

Browse files
authored
Merge pull request #523 from rabbitmq/ra_log_ets-timeout
Use infinity timeout for ra_log_ets:mem_table_please
2 parents a9a4897 + 36e0279 commit e6656df

File tree

4 files changed

+21
-15
lines changed

4 files changed

+21
-15
lines changed

src/ra_lib.erl

+5-3
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,9 @@ partition_parallel(F, Es) ->
303303

304304
partition_parallel(F, Es, Timeout) ->
305305
Parent = self(),
306-
Running = [{spawn_monitor(fun() -> Parent ! {self(), F(E)} end), E}
306+
Running = [{spawn_monitor(fun() ->
307+
Parent ! {self(), F(E)}
308+
end), E}
307309
|| E <- Es],
308310
collect(Running, {[], []}, Timeout).
309311

@@ -317,8 +319,8 @@ collect([{{Pid, MRef}, E} | Next], {Left, Right}, Timeout) ->
317319
{Pid, false} ->
318320
erlang:demonitor(MRef, [flush]),
319321
collect(Next, {Left, [E | Right]}, Timeout);
320-
{'DOWN', MRef, process, Pid, _Reason} ->
321-
collect(Next, {Left, [E | Right]}, Timeout)
322+
{'DOWN', MRef, process, Pid, Reason} ->
323+
collect(Next, {Left, [{E, Reason} | Right]}, Timeout)
322324
after Timeout ->
323325
exit(partition_parallel_timeout)
324326
end.

src/ra_log.erl

+5-4
Original file line numberDiff line numberDiff line change
@@ -669,9 +669,9 @@ handle_event({written, _Term, {FromIdx, _}} = Evt,
669669
[LogId, FromIdx, Expected]),
670670
{resend_from(Expected, State0), []};
671671
false ->
672-
?INFO("~ts: ra_log: written gap detected at ~b but is outside
673-
of mem table range. Updating last written index to ~b!",
674-
[LogId, FromIdx, Expected]),
672+
?DEBUG("~ts: ra_log: written gap detected at ~b but is outside
673+
of mem table range ~w. Updating last written index to ~b!",
674+
[LogId, FromIdx, MtRange, Expected]),
675675
%% if the entry is not in the mem table we may have missed a
676676
%% written event due to wal crash. Accept written event by updating
677677
%% last written index term and recursing
@@ -686,7 +686,8 @@ handle_event({segments, TidRanges, NewSegs},
686686
readers = Readers
687687
} = State0) ->
688688
Reader = ra_log_reader:update_segments(NewSegs, Reader0),
689-
put_counter(Cfg, ?C_RA_SVR_METRIC_NUM_SEGMENTS, ra_log_reader:segment_ref_count(Reader)),
689+
put_counter(Cfg, ?C_RA_SVR_METRIC_NUM_SEGMENTS,
690+
ra_log_reader:segment_ref_count(Reader)),
690691
%% the tid ranges arrive in the reverse order they were written
691692
%% (new -> old) so we need to foldr here to process the oldest first
692693
Mt = lists:foldr(

src/ra_log_ets.erl

+9-6
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ mem_table_please(#{log_ets := Name,
5454
open_mem_tbls := OpnMemTbls}, UId, Mode) ->
5555
case ets:lookup(OpnMemTbls, UId) of
5656
[] ->
57-
case gen_server:call(Name, {mem_table_please, UId, #{}}) of
57+
case gen_server:call(Name, {mem_table_please, UId, #{}}, infinity) of
5858
{ok, [Tid | Rem]} ->
5959
Mt = lists:foldl(
6060
fun (T, Acc) ->
@@ -137,18 +137,20 @@ handle_call(Request, _From, State) ->
137137

138138
handle_cast({exec_delete, UId, Spec},
139139
#state{names = #{open_mem_tbls := MemTables}} = State) ->
140+
141+
%% delete from open mem tables if {delete, tid()}
140142
case Spec of
141143
{delete, Tid} ->
142144
ets:delete_object(MemTables, {UId, Tid});
143145
_ ->
144146
ok
145147
end,
146148

147-
%% TODO: delete from ra_log_open_mem_tables if {delete, tid()}
148149
try timer:tc(fun () -> ra_mt:delete(Spec) end) of
149150
{Time, Num} ->
150-
?DEBUG_IF(Time > 25_000, "ra_log_ets: ra_mt:delete/1 took ~bms to delete ~w ~b entries",
151-
[Time div 1000, Spec, Num]),
151+
?DEBUG_IF(Time > 25_000,
152+
"ra_log_ets: ra_mt:delete/1 took ~bms to delete ~w ~b entries",
153+
[Time div 1000, Spec, Num]),
152154
ok
153155
catch
154156
_:Err ->
@@ -166,8 +168,9 @@ handle_cast({delete_mem_tables, UId},
166168
[begin
167169
try timer:tc(fun () -> ets_delete(Tid) end) of
168170
{Time, true} ->
169-
?DEBUG_IF(Time > 25_000, "ra_log_ets: ets:delete/1 took ~bms to delete ~w",
170-
[Time div 1000, Tid]),
171+
?DEBUG_IF(Time > 25_000,
172+
"ra_log_ets: ets:delete/1 took ~bms to delete ~w",
173+
[Time div 1000, Tid]),
171174
ok
172175
catch
173176
_:Err ->

src/ra_log_segment_writer.erl

+2-2
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,8 @@ handle_cast({mem_tables, Ranges, WalFile}, #state{data_dir = Dir,
150150
false ->
151151
%% delete all tids as the uid is not
152152
%% registered
153-
?DEBUG("segment_writer in '~w': deleting memtable "
154-
"for ~w as not a registered uid",
153+
?DEBUG("segment_writer in '~ts': deleting memtable "
154+
"for ~ts as not a registered uid",
155155
[System, UId]),
156156
ok = ra_log_ets:delete_mem_tables(Names, UId),
157157
Acc

0 commit comments

Comments
 (0)