Add file_handle_cache FD reservations
This commit is contained in:
parent
d00e97d6d8
commit
cf080b9937
|
|
@ -393,6 +393,7 @@ terminate(VHost, Terms, State0 = #mqistate { dir = Dir,
|
|||
ok = file:sync(Fd),
|
||||
ok = file:close(Fd)
|
||||
end, OpenFds),
|
||||
file_handle_cache:release_reservation(),
|
||||
%% Write recovery terms for faster recovery.
|
||||
rabbit_recovery_terms:store(VHost, filename:basename(Dir),
|
||||
[{mqi_state, {?VERSION, Segments}} | Terms]),
|
||||
|
|
@ -408,6 +409,7 @@ delete_and_terminate(State = #mqistate { dir = Dir,
|
|||
_ = maps:map(fun(_, Fd) ->
|
||||
ok = file:close(Fd)
|
||||
end, OpenFds),
|
||||
file_handle_cache:release_reservation(),
|
||||
%% Erase the data on disk.
|
||||
ok = erase_index_dir(Dir),
|
||||
State#mqistate{ segments = #{},
|
||||
|
|
@ -484,9 +486,18 @@ new_segment_file(Segment, State = #mqistate{ segments = Segments }) ->
|
|||
%% using too many FDs when the consumer lags a lot. We
|
||||
%% limit at 4 because we try to keep up to 2 for reading
|
||||
%% and 2 for writing.
|
||||
reduce_fd_usage(_, State = #mqistate{ fds = OpenFds })
|
||||
reduce_fd_usage(SegmentToOpen, State = #mqistate{ fds = OpenFds })
|
||||
when map_size(OpenFds) < 4 ->
|
||||
State;
|
||||
%% The only case where we need to update reservations is
|
||||
%% when we are opening a segment that wasn't already open,
|
||||
%% and we are not closing another segment at the same time.
|
||||
case OpenFds of
|
||||
#{SegmentToOpen := _} ->
|
||||
State;
|
||||
_ ->
|
||||
file_handle_cache:set_reservation(map_size(OpenFds) + 1),
|
||||
State
|
||||
end;
|
||||
reduce_fd_usage(SegmentToOpen, State = #mqistate{ fds = OpenFds0 }) ->
|
||||
case OpenFds0 of
|
||||
#{SegmentToOpen := _} ->
|
||||
|
|
@ -719,6 +730,10 @@ delete_segment(Segment, State0 = #mqistate{ fds = OpenFds0 }) ->
|
|||
State = case maps:take(Segment, OpenFds0) of
|
||||
{Fd, OpenFds} ->
|
||||
ok = file:close(Fd),
|
||||
case map_size(OpenFds) of
|
||||
0 -> file_handle_cache:release_reservation();
|
||||
N -> file_handle_cache:set_reservation(N)
|
||||
end,
|
||||
State0#mqistate{ fds = OpenFds };
|
||||
error ->
|
||||
State0
|
||||
|
|
|
|||
|
|
@ -124,8 +124,8 @@ setup_file_handle_cache(Config) ->
|
|||
|
||||
setup_file_handle_cache1() ->
|
||||
%% FIXME: Why are we doing this?
|
||||
application:set_env(rabbit, file_handles_high_watermark, 10),
|
||||
ok = file_handle_cache:set_limit(10),
|
||||
application:set_env(rabbit, file_handles_high_watermark, 100),
|
||||
ok = file_handle_cache:set_limit(100),
|
||||
ok.
|
||||
|
||||
end_per_group(Group, Config) ->
|
||||
|
|
|
|||
Loading…
Reference in New Issue