summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmile Joubert <emile@rabbitmq.com>2011-09-30 15:43:55 +0100
committerEmile Joubert <emile@rabbitmq.com>2011-09-30 15:43:55 +0100
commit678ea2acc02ac75342c89c4250b00b0549d26f8f (patch)
treeb05dc539caad7eb4ae9ce7fe5943f354ef3b67ab
parent0265670047d9307f4506bc91f6f70c2c8c459301 (diff)
downloadrabbitmq-server-git-678ea2acc02ac75342c89c4250b00b0549d26f8f.tar.gz
Immediate updates after memory vm highwatermark change
-rw-r--r--src/rabbit_control.erl13
-rw-r--r--src/rabbit_tests.erl5
-rw-r--r--src/vm_memory_monitor.erl6
3 files changed, 18 insertions, 6 deletions
diff --git a/src/rabbit_control.erl b/src/rabbit_control.erl
index 9034c81f99..22e2312ee0 100644
--- a/src/rabbit_control.erl
+++ b/src/rabbit_control.erl
@@ -91,6 +91,9 @@ start() ->
print_error("invalid command '~s'",
[string:join([atom_to_list(Command) | Args], " ")]),
usage();
+ {badarg, Reason} ->
+ print_error("invalid parameter: ~s ~p", [Reason, Args]),
+ usage();
{error, Reason} ->
print_error("~p", [Reason]),
quit(2);
@@ -322,9 +325,13 @@ action(trace_off, Node, [], Opts, Inform) ->
rpc_call(Node, rabbit_trace, stop, [list_to_binary(VHost)]);
action(set_vm_memory_high_watermark, Node, [Arg], _Opts, Inform) ->
- Frac = list_to_float("0" ++ Arg),
- Inform("Setting memory threshhold on ~p to ~p", [Node, Frac]),
- rpc_call(Node, vm_memory_monitor, set_vm_memory_high_watermark, [Frac]);
+ try list_to_float(Arg) of
+ Frac -> Inform("Setting memory threshhold on ~p to ~p", [Node, Frac]),
+ rpc_call(Node, vm_memory_monitor, set_vm_memory_high_watermark,
+ [Frac])
+ catch
+ error:badarg = X -> {X, "invalid floating point format"}
+ end;
action(set_permissions, Node, [Username, CPerm, WPerm, RPerm], Opts, Inform) ->
VHost = proplists:get_value(?VHOST_OPT, Opts),
diff --git a/src/rabbit_tests.erl b/src/rabbit_tests.erl
index cd5d9be0cc..c8810dfb81 100644
--- a/src/rabbit_tests.erl
+++ b/src/rabbit_tests.erl
@@ -1252,6 +1252,11 @@ test_server_status() ->
%% list consumers
ok = control_action(list_consumers, []),
+ %% set vm memory high watermark
+ io:format("Expecting failure: "),
+ {badarg, _} = control_action(set_vm_memory_high_watermark, ["1"]),
+ ok = control_action(set_vm_memory_high_watermark, ["1.0"]),
+
%% cleanup
[{ok, _} = rabbit_amqqueue:delete(QR, false, false) || QR <- [Q, Q2]],
diff --git a/src/vm_memory_monitor.erl b/src/vm_memory_monitor.erl
index 3b95591488..01597a236c 100644
--- a/src/vm_memory_monitor.erl
+++ b/src/vm_memory_monitor.erl
@@ -111,7 +111,7 @@ init([MemFraction]) ->
State = #state { timeout = ?DEFAULT_MEMORY_CHECK_INTERVAL,
timer = TRef,
alarmed = false},
- {ok, internal_update(set_mem_limits(State, MemFraction))}.
+ {ok, set_mem_limits(State, MemFraction)}.
handle_call(get_vm_memory_high_watermark, _From, State) ->
{reply, State#state.memory_limit / State#state.total_memory, State};
@@ -175,8 +175,8 @@ set_mem_limits(State, MemFraction) ->
MemLim = get_mem_limit(MemFraction, TotalMemory),
error_logger:info_msg("Memory limit set to ~pMB of ~pMB total.~n",
[trunc(MemLim/?ONE_MB), trunc(TotalMemory/?ONE_MB)]),
- State #state { total_memory = TotalMemory,
- memory_limit = MemLim }.
+ internal_update(State #state { total_memory = TotalMemory,
+ memory_limit = MemLim }).
internal_update(State = #state { memory_limit = MemLimit,
alarmed = Alarmed}) ->