diff options
| author | Emile Joubert <emile@rabbitmq.com> | 2011-09-30 15:43:55 +0100 |
|---|---|---|
| committer | Emile Joubert <emile@rabbitmq.com> | 2011-09-30 15:43:55 +0100 |
| commit | 678ea2acc02ac75342c89c4250b00b0549d26f8f (patch) | |
| tree | b05dc539caad7eb4ae9ce7fe5943f354ef3b67ab | |
| parent | 0265670047d9307f4506bc91f6f70c2c8c459301 (diff) | |
| download | rabbitmq-server-git-678ea2acc02ac75342c89c4250b00b0549d26f8f.tar.gz | |
Immediate updates after memory vm highwatermark change
| -rw-r--r-- | src/rabbit_control.erl | 13 | ||||
| -rw-r--r-- | src/rabbit_tests.erl | 5 | ||||
| -rw-r--r-- | src/vm_memory_monitor.erl | 6 |
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}) -> |
