summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Klishin <mklishin@pivotal.io>2015-07-27 13:53:53 +0300
committerMichael Klishin <mklishin@pivotal.io>2015-07-27 13:53:53 +0300
commitf8e8c2fe117179adf7cf091acd75c5d21651b332 (patch)
treec23d690c34a6c8985fd7346f108054ee5515384a
parent9cd7f2c974f5b9c3d998a729d57a750177e0f0bc (diff)
parent0c9509eeb85ca3e0091fd617e3d6365258a43c04 (diff)
downloadrabbitmq-server-git-f8e8c2fe117179adf7cf091acd75c5d21651b332.tar.gz
Merge branch 'stable'
-rw-r--r--ebin/rabbit_app.in2
-rw-r--r--packaging/RPMS/Fedora/rabbitmq-server.spec3
-rw-r--r--packaging/debs/Debian/debian/changelog6
-rw-r--r--src/file_handle_cache.erl39
-rw-r--r--src/rabbit.erl11
5 files changed, 52 insertions, 9 deletions
diff --git a/ebin/rabbit_app.in b/ebin/rabbit_app.in
index 91eb5847d8..48edbd4d1e 100644
--- a/ebin/rabbit_app.in
+++ b/ebin/rabbit_app.in
@@ -28,6 +28,8 @@
{channel_max, 0},
{heartbeat, 580},
{msg_store_file_size_limit, 16777216},
+ {fhc_write_buffering, true},
+ {fhc_read_buffering, true},
{queue_index_max_journal_entries, 65536},
{queue_index_embed_msgs_below, 4096},
{default_user, <<"guest">>},
diff --git a/packaging/RPMS/Fedora/rabbitmq-server.spec b/packaging/RPMS/Fedora/rabbitmq-server.spec
index 257f1baec4..34bafb1471 100644
--- a/packaging/RPMS/Fedora/rabbitmq-server.spec
+++ b/packaging/RPMS/Fedora/rabbitmq-server.spec
@@ -132,6 +132,9 @@ done
rm -rf %{buildroot}
%changelog
+* Tue Jul 21 2015 michael@rabbitmq.com 3.5.4-1
+- New Upstream Release
+
* Fri May 22 2015 jean-sebastien@rabbitmq.com 3.5.3-1
- New Upstream Release
diff --git a/packaging/debs/Debian/debian/changelog b/packaging/debs/Debian/debian/changelog
index 66380b7eaf..17c7cae88e 100644
--- a/packaging/debs/Debian/debian/changelog
+++ b/packaging/debs/Debian/debian/changelog
@@ -1,3 +1,9 @@
+rabbitmq-server (3.5.4-1) unstable; urgency=low
+
+ * New Upstream Release
+
+ -- Michael Klishin <michael@rabbitmq.com> Tue, 21 Jul 2015 20:25:48 +0100
+
rabbitmq-server (3.5.3-1) unstable; urgency=low
* New Upstream Release
diff --git a/src/file_handle_cache.erl b/src/file_handle_cache.erl
index 8be19e5be3..d7e5abc873 100644
--- a/src/file_handle_cache.erl
+++ b/src/file_handle_cache.erl
@@ -343,6 +343,16 @@ read(Ref, Count) ->
[Ref], keep,
fun ([#handle { is_read = false }]) ->
{error, not_open_for_reading};
+ ([#handle{read_buffer_size_limit = 0,
+ hdl = Hdl, offset = Offset} = Handle]) ->
+ %% The read buffer is disabled. This is just an
+ %% optimization: the clauses below can handle this case.
+ case prim_file_read(Hdl, Count) of
+ {ok, Data} -> {{ok, Data},
+ [Handle#handle{offset = Offset+size(Data)}]};
+ eof -> {eof, [Handle #handle { at_eof = true }]};
+ Error -> {Error, Handle}
+ end;
([Handle = #handle{read_buffer = Buf,
read_buffer_pos = BufPos,
read_buffer_rem = BufRem,
@@ -584,8 +594,11 @@ info() -> info(?INFO_KEYS).
info(Items) -> gen_server2:call(?SERVER, {info, Items}, infinity).
clear_read_cache() ->
- gen_server2:cast(?SERVER, clear_read_cache),
- clear_vhost_read_cache(rabbit_vhost:list()).
+ case application:get_env(rabbit, fhc_read_buffering) of
+ false -> ok;
+ true -> gen_server2:cast(?SERVER, clear_read_cache),
+ clear_vhost_read_cache(rabbit_vhost:list())
+ end.
clear_vhost_read_cache([]) ->
ok;
@@ -816,15 +829,23 @@ oldest(Tree, DefaultFun) ->
new_closed_handle(Path, Mode, Options) ->
WriteBufferSize =
- case proplists:get_value(write_buffer, Options, unbuffered) of
- unbuffered -> 0;
- infinity -> infinity;
- N when is_integer(N) -> N
+ case application:get_env(rabbit, fhc_write_buffering) of
+ {ok, false} -> 0;
+ {ok, true} ->
+ case proplists:get_value(write_buffer, Options, unbuffered) of
+ unbuffered -> 0;
+ infinity -> infinity;
+ N when is_integer(N) -> N
+ end
end,
ReadBufferSize =
- case proplists:get_value(read_buffer, Options, unbuffered) of
- unbuffered -> 0;
- N2 when is_integer(N2) -> N2
+ case application:get_env(rabbit, fhc_read_buffering) of
+ {ok, false} -> 0;
+ {ok, true} ->
+ case proplists:get_value(read_buffer, Options, unbuffered) of
+ unbuffered -> 0;
+ N2 when is_integer(N2) -> N2
+ end
end,
Ref = make_ref(),
put({Ref, fhc_handle}, #handle { hdl = closed,
diff --git a/src/rabbit.erl b/src/rabbit.erl
index 5898c66726..62369e9d23 100644
--- a/src/rabbit.erl
+++ b/src/rabbit.erl
@@ -826,6 +826,17 @@ ensure_working_fhc() ->
%% file_handle_cache, we spawn a separate process.
Parent = self(),
TestFun = fun() ->
+ ReadBuf = case application:get_env(rabbit, fhc_read_buffering) of
+ {ok, true} -> "ON";
+ {ok, false} -> "OFF"
+ end,
+ WriteBuf = case application:get_env(rabbit, fhc_write_buffering) of
+ {ok, true} -> "ON";
+ {ok, false} -> "OFF"
+ end,
+ rabbit_log:info(
+ "FHC read buffering: ~s~n"
+ "FHC write buffering: ~s~n", [ReadBuf, WriteBuf]),
Filename = filename:join(code:lib_dir(kernel, ebin), "kernel.app"),
{ok, Fd} = file_handle_cache:open(Filename, [raw, binary, read], []),
{ok, _} = file_handle_cache:read(Fd, 1),