summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Klishin <michael@novemberain.com>2018-09-27 17:05:51 -0700
committerGitHub <noreply@github.com>2018-09-27 17:05:51 -0700
commit834562336754867076be91e72a77e6fd849340dc (patch)
tree9f3b86bb7d202ad71633c0824fd52f36e964df10
parent7dc8cf46bd704576c48e89d93bad3b2ac6600871 (diff)
parent04f5d8fa3779e5ac1773c1c14912be5c4c2ac1cb (diff)
downloadrabbitmq-server-git-834562336754867076be91e72a77e6fd849340dc.tar.gz
Merge pull request #1714 from rabbitmq/rabbitmq-cli-260
Make rabbit_vhost:add/2 idempotent
-rw-r--r--src/rabbit_vhost.erl11
-rw-r--r--test/vhost_SUITE.erl16
2 files changed, 23 insertions, 4 deletions
diff --git a/src/rabbit_vhost.erl b/src/rabbit_vhost.erl
index fdcba35db2..bf89805d13 100644
--- a/src/rabbit_vhost.erl
+++ b/src/rabbit_vhost.erl
@@ -83,7 +83,13 @@ recover(VHost) ->
-define(INFO_KEYS, [name, tracing, cluster_state]).
-add(VHostPath, ActingUser) ->
+add(VHost, ActingUser) ->
+ case exists(VHost) of
+ true -> ok;
+ false -> do_add(VHost, ActingUser)
+ end.
+
+do_add(VHostPath, ActingUser) ->
rabbit_log:info("Adding vhost '~s'~n", [VHostPath]),
R = rabbit_misc:execute_mnesia_transaction(
fun () ->
@@ -91,7 +97,8 @@ add(VHostPath, ActingUser) ->
[] -> ok = mnesia:write(rabbit_vhost,
#vhost{virtual_host = VHostPath},
write);
- [_] -> mnesia:abort({vhost_already_exists, VHostPath})
+ %% the vhost already exists
+ [_] -> ok
end
end,
fun (ok, true) ->
diff --git a/test/vhost_SUITE.erl b/test/vhost_SUITE.erl
index 6ed84dcfe3..d339dc43b3 100644
--- a/test/vhost_SUITE.erl
+++ b/test/vhost_SUITE.erl
@@ -34,7 +34,8 @@ groups() ->
ClusterSize1Tests = [
single_node_vhost_deletion_forces_connection_closure,
vhost_failure_forces_connection_closure,
- dead_vhost_connection_refused
+ dead_vhost_connection_refused,
+ vhost_creation_idempotency
],
ClusterSize2Tests = [
cluster_vhost_deletion_forces_connection_closure,
@@ -43,7 +44,8 @@ groups() ->
vhost_failure_forces_connection_closure_on_failure_node,
dead_vhost_connection_refused_on_failure_node,
node_starts_with_dead_vhosts,
- node_starts_with_dead_vhosts_and_ignore_slaves
+ node_starts_with_dead_vhosts_and_ignore_slaves,
+ vhost_creation_idempotency
],
[
{cluster_size_1_network, [], ClusterSize1Tests},
@@ -373,6 +375,16 @@ node_starts_with_dead_vhosts_and_ignore_slaves(Config) ->
true = rabbit_ct_broker_helpers:rpc(Config, 1,
rabbit_vhost_sup_sup, is_vhost_alive, [VHost2]).
+vhost_creation_idempotency(Config) ->
+ VHost = <<"idempotency-test">>,
+ try
+ ?assertEqual(ok, rabbit_ct_broker_helpers:add_vhost(Config, VHost)),
+ ?assertEqual(ok, rabbit_ct_broker_helpers:add_vhost(Config, VHost)),
+ ?assertEqual(ok, rabbit_ct_broker_helpers:add_vhost(Config, VHost))
+ after
+ rabbit_ct_broker_helpers:delete_vhost(Config, VHost)
+ end.
+
%% -------------------------------------------------------------------
%% Helpers
%% -------------------------------------------------------------------