diff options
| author | Jean-Sébastien Pédron <jean-sebastien.pedron@dumbbell.fr> | 2015-10-23 12:10:07 +0200 |
|---|---|---|
| committer | Jean-Sébastien Pédron <jean-sebastien.pedron@dumbbell.fr> | 2015-10-23 12:10:07 +0200 |
| commit | 9b248462c68c4e91713059681c2b554ccc754e94 (patch) | |
| tree | 69b11ee16ce7c1577a758852dd2c25e627dba31a /src | |
| parent | ea9e299e912f0e44a073feffcfab6c5a6de19846 (diff) | |
| parent | ad461b30e9c0104277dff7ec937354d1fc1e64d5 (diff) | |
| download | rabbitmq-server-git-9b248462c68c4e91713059681c2b554ccc754e94.tar.gz | |
Merge branch 'master' into erlang.mk
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_amqqueue_process.erl | 5 | ||||
| -rw-r--r-- | src/rabbit_control_main.erl | 6 | ||||
| -rw-r--r-- | src/vm_memory_monitor.erl | 28 |
3 files changed, 28 insertions, 11 deletions
diff --git a/src/rabbit_amqqueue_process.erl b/src/rabbit_amqqueue_process.erl index 15fde37c9c..452047fdb2 100644 --- a/src/rabbit_amqqueue_process.erl +++ b/src/rabbit_amqqueue_process.erl @@ -92,7 +92,8 @@ durable, auto_delete, arguments, - owner_pid + owner_pid, + exclusive ]). -define(INFO_KEYS, [pid | ?CREATION_EVENT_KEYS ++ ?STATISTICS_KEYS -- [name]]). @@ -828,6 +829,8 @@ i(owner_pid, #q{q = #amqqueue{exclusive_owner = none}}) -> ''; i(owner_pid, #q{q = #amqqueue{exclusive_owner = ExclusiveOwner}}) -> ExclusiveOwner; +i(exclusive, #q{q = #amqqueue{exclusive_owner = ExclusiveOwner}}) -> + is_pid(ExclusiveOwner); i(policy, #q{q = Q}) -> case rabbit_policy:name(Q) of none -> ''; diff --git a/src/rabbit_control_main.erl b/src/rabbit_control_main.erl index fe0563bbc7..59223dc19b 100644 --- a/src/rabbit_control_main.erl +++ b/src/rabbit_control_main.erl @@ -410,6 +410,12 @@ action(set_vm_memory_high_watermark, Node, [Arg], _Opts, Inform) -> Inform("Setting memory threshold on ~p to ~p", [Node, Frac]), rpc_call(Node, vm_memory_monitor, set_vm_memory_high_watermark, [Frac]); +action(set_vm_memory_high_watermark, Node, ["absolute", Arg], _Opts, Inform) -> + Limit = list_to_integer(Arg), + Inform("Setting memory threshold on ~p to ~pMB", [Node, Limit]), + rpc_call(Node, vm_memory_monitor, set_vm_memory_high_watermark, + [{absolute, Limit}]); + action(set_permissions, Node, [Username, CPerm, WPerm, RPerm], Opts, Inform) -> VHost = proplists:get_value(?VHOST_OPT, Opts), Inform("Setting permissions for user \"~s\" in vhost \"~s\"", diff --git a/src/vm_memory_monitor.erl b/src/vm_memory_monitor.erl index bf9a77c174..fe68f50239 100644 --- a/src/vm_memory_monitor.erl +++ b/src/vm_memory_monitor.erl @@ -52,7 +52,7 @@ -record(state, {total_memory, memory_limit, - memory_fraction, + memory_config_limit, timeout, timer, alarmed, @@ -63,6 +63,7 @@ -ifdef(use_specs). +-type(vm_memory_high_watermark() :: (float() | {'absolute', integer()})). -spec(start_link/1 :: (float()) -> rabbit_types:ok_pid_or_error()). -spec(start_link/3 :: (float(), fun ((any()) -> 'ok'), fun ((any()) -> 'ok')) -> rabbit_types:ok_pid_or_error()). @@ -70,8 +71,8 @@ -spec(get_vm_limit/0 :: () -> non_neg_integer()). -spec(get_check_interval/0 :: () -> non_neg_integer()). -spec(set_check_interval/1 :: (non_neg_integer()) -> 'ok'). --spec(get_vm_memory_high_watermark/0 :: () -> float()). --spec(set_vm_memory_high_watermark/1 :: (float()) -> 'ok'). +-spec(get_vm_memory_high_watermark/0 :: () -> vm_memory_high_watermark()). +-spec(set_vm_memory_high_watermark/1 :: (vm_memory_high_watermark()) -> 'ok'). -spec(get_memory_limit/0 :: () -> non_neg_integer()). -endif. @@ -128,11 +129,12 @@ init([MemFraction, AlarmFuns]) -> alarm_funs = AlarmFuns }, {ok, set_mem_limits(State, MemFraction)}. -handle_call(get_vm_memory_high_watermark, _From, State) -> - {reply, State#state.memory_fraction, State}; +handle_call(get_vm_memory_high_watermark, _From, + #state{memory_config_limit = MemLimit} = State) -> + {reply, MemLimit, State}; -handle_call({set_vm_memory_high_watermark, MemFraction}, _From, State) -> - {reply, ok, set_mem_limits(State, MemFraction)}; +handle_call({set_vm_memory_high_watermark, MemLimit}, _From, State) -> + {reply, ok, set_mem_limits(State, MemLimit)}; handle_call(get_check_interval, _From, State) -> {reply, State#state.timeout, State}; @@ -166,7 +168,7 @@ code_change(_OldVsn, State, _Extra) -> %% Server Internals %%---------------------------------------------------------------------------- -set_mem_limits(State, MemFraction) -> +set_mem_limits(State, MemLimit) -> case erlang:system_info(wordsize) of 4 -> error_logger:warning_msg( @@ -206,12 +208,18 @@ set_mem_limits(State, MemFraction) -> _ -> TotalMemory end, - MemLim = trunc(MemFraction * UsableMemory), + MemLim = interpret_limit(MemLimit, UsableMemory), error_logger:info_msg("Memory limit set to ~pMB of ~pMB total.~n", [trunc(MemLim/?ONE_MB), trunc(TotalMemory/?ONE_MB)]), internal_update(State #state { total_memory = TotalMemory, memory_limit = MemLim, - memory_fraction = MemFraction}). + memory_config_limit = MemLimit}). + +interpret_limit({'absolute', MemLim}, UsableMemory) -> + %% Absolute memory is provided in MB + min(MemLim * ?ONE_MB, UsableMemory); +interpret_limit(MemFraction, UsableMemory) -> + trunc(MemFraction * UsableMemory). internal_update(State = #state { memory_limit = MemLimit, alarmed = Alarmed, |
