summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2012-03-27 13:20:01 +0100
committerSimon MacMullen <simon@rabbitmq.com>2012-03-27 13:20:01 +0100
commit799eee63e19fa4313125ea4c02c524a924ad6205 (patch)
treed3172d9e3c26c093294b4bfbf0eb28cadea6c86d
parent6ba99d5beaec247be531f03985f5226b2ee0cef6 (diff)
downloadrabbitmq-server-git-799eee63e19fa4313125ea4c02c524a924ad6205.tar.gz
A few more APIs useful for mgmt. Make proplist keys always have to be binaries.
-rw-r--r--src/rabbit_control.erl5
-rw-r--r--src/rabbit_runtime_parameters.erl48
2 files changed, 32 insertions, 21 deletions
diff --git a/src/rabbit_control.erl b/src/rabbit_control.erl
index ec514fbf1d..cd1df2e258 100644
--- a/src/rabbit_control.erl
+++ b/src/rabbit_control.erl
@@ -270,8 +270,9 @@ action(list_user_permissions, Node, Args = [_Username], _Opts, Inform) ->
action(set_parameter, Node, [AppName, Key, Value], _Opts, Inform) ->
Inform("Setting runtime parameter ~p for app ~p to ~p",
[Key, AppName, Value]),
- rpc_call(Node, rabbit_runtime_parameters, set, [list_to_atom(AppName),
- list_to_atom(Key), Value]);
+ rpc_call(Node, rabbit_runtime_parameters, set,
+ [list_to_atom(AppName), list_to_atom(Key),
+ rabbit_runtime_parameters:parse(Value)]);
action(clear_parameter, Node, [AppName, Key], _Opts, Inform) ->
Inform("Clearing runtime parameter ~p for app ~p", [Key, AppName]),
diff --git a/src/rabbit_runtime_parameters.erl b/src/rabbit_runtime_parameters.erl
index 1ba38ec85a..d1ff159d0b 100644
--- a/src/rabbit_runtime_parameters.erl
+++ b/src/rabbit_runtime_parameters.erl
@@ -18,7 +18,8 @@
-include("rabbit.hrl").
--export([set/3, clear/2, list/0, list_formatted/0, lookup/3, info_keys/0]).
+-export([parse/1, set/3, clear/2, list/0, list_formatted/0, lookup/2, value/3,
+ info_keys/0]).
-import(rabbit_misc, [pget/2, pset/3]).
@@ -26,9 +27,8 @@
%%---------------------------------------------------------------------------
-set(AppName, Key, Value) ->
+set(AppName, Key, Term) ->
Module = lookup_app(AppName),
- Term = parse(Value),
validate(Term),
Module:validate(Key, Term),
ok = rabbit_misc:execute_mnesia_transaction(
@@ -45,19 +45,26 @@ clear(AppName, Key) ->
end).
list() ->
- All = rabbit_misc:dirty_read_all(?TABLE),
- [[{app_name, AppName},
- {key, Key},
- {value, Value}] || #runtime_parameters{key = {AppName, Key},
- value = Value} <- All].
+ [p(Param) || Param <- rabbit_misc:dirty_read_all(?TABLE)].
list_formatted() ->
[pset(value, format(pget(value, P)), P) || P <- list()].
-lookup(AppName, Key, Default) ->
+lookup(AppName, Key) ->
+ case lookup0(AppName, Key, rabbit_misc:const(not_found)) of
+ not_found -> not_found;
+ Params -> p(Params)
+ end.
+
+value(AppName, Key, Default) ->
+ Params = lookup0(AppName, Key,
+ fun () -> lookup_missing(AppName, Key, Default) end),
+ Params#runtime_parameters.value.
+
+lookup0(AppName, Key, DefaultFun) ->
case mnesia:dirty_read(?TABLE, {AppName, Key}) of
- [] -> lookup_missing(AppName, Key, Default);
- [R] -> R#runtime_parameters.value
+ [] -> DefaultFun();
+ [R] -> R
end.
lookup_missing(AppName, Key, Default) ->
@@ -66,13 +73,18 @@ lookup_missing(AppName, Key, Default) ->
case mnesia:read(?TABLE, {AppName, Key}) of
[] -> mnesia:write(?TABLE, c(AppName, Key, Default), write),
Default;
- [R] -> R#runtime_parameters.value
+ [R] -> R
end
end).
c(AppName, Key, Default) -> #runtime_parameters{key = {AppName, Key},
value = Default}.
+p(#runtime_parameters{key = {AppName, Key}, value = Value}) ->
+ [{app_name, AppName},
+ {key, Key},
+ {value, Value}].
+
info_keys() -> [app_name, key, value].
%%---------------------------------------------------------------------------
@@ -120,10 +132,8 @@ validate(A) when is_atom(A) -> exit({non_bool_atom, A});
validate(N) when is_number(N) -> ok;
validate(B) when is_binary(B) -> ok.
-validate_proplist([]) -> ok;
-validate_proplist([{K, V} | Rest]) when is_atom(K) -> validate(V),
- validate_proplist(Rest);
-validate_proplist([{K, V} | Rest]) when is_list(K) -> validate(V),
- validate_proplist(Rest);
-validate_proplist([{K, _V} | _Rest]) -> exit({bad_key, K});
-validate_proplist([H | _Rest]) -> exit({not_two_tuple, H}).
+validate_proplist([]) -> ok;
+validate_proplist([{K, V} | Rest]) when is_binary(K) -> validate(V),
+ validate_proplist(Rest);
+validate_proplist([{K, _V} | _Rest]) -> exit({bad_key, K});
+validate_proplist([H | _Rest]) -> exit({not_two_tuple,H}).