summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2012-04-05 12:29:17 +0100
committerSimon MacMullen <simon@rabbitmq.com>2012-04-05 12:29:17 +0100
commit506218c2c232f83223ab70eb157939473dfba7f6 (patch)
treea17d9cae2cf98429cc5138924379e80a7a6c2f3d
parente1d4fcef58c6deec86b290523d395eb945a271c5 (diff)
downloadrabbitmq-server-506218c2c232f83223ab70eb157939473dfba7f6.tar.gz
We should validate clearing as well.
-rw-r--r--src/rabbit_runtime_parameter.erl1
-rw-r--r--src/rabbit_runtime_parameters.erl58
-rw-r--r--src/rabbit_runtime_parameters_test.erl6
-rw-r--r--src/rabbit_tests.erl2
4 files changed, 43 insertions, 24 deletions
diff --git a/src/rabbit_runtime_parameter.erl b/src/rabbit_runtime_parameter.erl
index 51a00db7..9b886a8c 100644
--- a/src/rabbit_runtime_parameter.erl
+++ b/src/rabbit_runtime_parameter.erl
@@ -21,6 +21,7 @@
behaviour_info(callbacks) ->
[
{validate, 3},
+ {validate_clear, 2},
{notify, 3},
{notify_clear, 2}
];
diff --git a/src/rabbit_runtime_parameters.erl b/src/rabbit_runtime_parameters.erl
index 3e2788c0..fd240fa7 100644
--- a/src/rabbit_runtime_parameters.erl
+++ b/src/rabbit_runtime_parameters.erl
@@ -30,44 +30,56 @@
set(AppName, Key, Term) ->
case set0(AppName, Key, Term) of
ok -> ok;
- {errors, L} -> {error_string, rabbit_misc:format_many(
- [{"Validation failed~n", []} | L])}
+ {errors, L} -> format_error(L)
end.
+format_error(L) ->
+ {error_string, rabbit_misc:format_many([{"Validation failed~n", []} | L])}.
+
set0(AppName, Key, Term) ->
case lookup_app(AppName) of
- {ok, Module} -> case flatten_errors(validate(Term)) of
- ok -> case flatten_errors(
- Module:validate(AppName, Key, Term)) of
- ok -> update(AppName, Key, Term),
- Module:notify(AppName, Key, Term),
- ok;
- E -> E
- end;
- E -> E
- end;
- E -> E
+ {ok, Mod} -> case flatten_errors(validate(Term)) of
+ ok -> case flatten_errors(
+ Mod:validate(AppName, Key, Term)) of
+ ok -> mnesia_update(AppName, Key, Term),
+ Mod:notify(AppName, Key, Term),
+ ok;
+ E -> E
+ end;
+ E -> E
+ end;
+ E -> E
end.
-update(AppName, Key, Term) ->
+mnesia_update(AppName, Key, Term) ->
ok = rabbit_misc:execute_mnesia_transaction(
fun () ->
ok = mnesia:write(?TABLE, c(AppName, Key, Term), write)
end).
clear(AppName, Key) ->
+ case clear0(AppName, Key) of
+ ok -> ok;
+ {errors, L} -> format_error(L)
+ end.
+
+clear0(AppName, Key) ->
case lookup_app(AppName) of
- {ok, Module} ->
- ok = rabbit_misc:execute_mnesia_transaction(
- fun () ->
- ok = mnesia:delete(?TABLE, {AppName, Key}, write)
- end),
- Module:notify_clear(AppName, Key),
- ok;
- E ->
- E
+ {ok, Mod} -> case flatten_errors(Mod:validate_clear(AppName, Key)) of
+ ok -> mnesia_clear(AppName, Key),
+ Mod:notify_clear(AppName, Key),
+ ok;
+ E -> E
+ end;
+ E -> E
end.
+mnesia_clear(AppName, Key) ->
+ ok = rabbit_misc:execute_mnesia_transaction(
+ fun () ->
+ ok = mnesia:delete(?TABLE, {AppName, Key}, write)
+ end).
+
list() ->
[p(P) || P <- rabbit_misc:dirty_read_all(?TABLE)].
diff --git a/src/rabbit_runtime_parameters_test.erl b/src/rabbit_runtime_parameters_test.erl
index 24cdfce9..d6cdeab5 100644
--- a/src/rabbit_runtime_parameters_test.erl
+++ b/src/rabbit_runtime_parameters_test.erl
@@ -17,7 +17,7 @@
-module(rabbit_runtime_parameters_test).
-behaviour(rabbit_runtime_parameter).
--export([validate/3, notify/3, notify_clear/2]).
+-export([validate/3, validate_clear/2, notify/3, notify_clear/2]).
-export([register/0]).
register() ->
@@ -27,5 +27,9 @@ validate(<<"test">>, <<"good">>, _Term) -> ok;
validate(<<"test">>, <<"maybe">>, <<"good">>) -> ok;
validate(<<"test">>, _, _) -> {error, "meh", []}.
+validate_clear(<<"test">>, <<"good">>) -> ok;
+validate_clear(<<"test">>, <<"maybe">>) -> ok;
+validate_clear(<<"test">>, _) -> {error, "meh", []}.
+
notify(_, _, _) -> ok.
notify_clear(_, _) -> ok.
diff --git a/src/rabbit_tests.erl b/src/rabbit_tests.erl
index d80f3162..1e3a2b86 100644
--- a/src/rabbit_tests.erl
+++ b/src/rabbit_tests.erl
@@ -1124,6 +1124,8 @@ test_runtime_parameters() ->
ok = control_action(clear_parameter, ["test", "good"]),
ok = control_action(clear_parameter, ["test", "maybe"]),
+ {error_string, _} =
+ control_action(clear_parameter, ["test", "neverexisted"]),
passed.