Skip to content

Commit 8345623

Browse files
Merge pull request #1714 from rabbitmq/rabbitmq-cli-260
Make rabbit_vhost:add/2 idempotent
2 parents 7dc8cf4 + 04f5d8f commit 8345623

File tree

2 files changed

+23
-4
lines changed

2 files changed

+23
-4
lines changed

src/rabbit_vhost.erl

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,15 +83,22 @@ recover(VHost) ->
8383

8484
-define(INFO_KEYS, [name, tracing, cluster_state]).
8585

86-
add(VHostPath, ActingUser) ->
86+
add(VHost, ActingUser) ->
87+
case exists(VHost) of
88+
true -> ok;
89+
false -> do_add(VHost, ActingUser)
90+
end.
91+
92+
do_add(VHostPath, ActingUser) ->
8793
rabbit_log:info("Adding vhost '~s'~n", [VHostPath]),
8894
R = rabbit_misc:execute_mnesia_transaction(
8995
fun () ->
9096
case mnesia:wread({rabbit_vhost, VHostPath}) of
9197
[] -> ok = mnesia:write(rabbit_vhost,
9298
#vhost{virtual_host = VHostPath},
9399
write);
94-
[_] -> mnesia:abort({vhost_already_exists, VHostPath})
100+
%% the vhost already exists
101+
[_] -> ok
95102
end
96103
end,
97104
fun (ok, true) ->

test/vhost_SUITE.erl

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ groups() ->
3434
ClusterSize1Tests = [
3535
single_node_vhost_deletion_forces_connection_closure,
3636
vhost_failure_forces_connection_closure,
37-
dead_vhost_connection_refused
37+
dead_vhost_connection_refused,
38+
vhost_creation_idempotency
3839
],
3940
ClusterSize2Tests = [
4041
cluster_vhost_deletion_forces_connection_closure,
@@ -43,7 +44,8 @@ groups() ->
4344
vhost_failure_forces_connection_closure_on_failure_node,
4445
dead_vhost_connection_refused_on_failure_node,
4546
node_starts_with_dead_vhosts,
46-
node_starts_with_dead_vhosts_and_ignore_slaves
47+
node_starts_with_dead_vhosts_and_ignore_slaves,
48+
vhost_creation_idempotency
4749
],
4850
[
4951
{cluster_size_1_network, [], ClusterSize1Tests},
@@ -373,6 +375,16 @@ node_starts_with_dead_vhosts_and_ignore_slaves(Config) ->
373375
true = rabbit_ct_broker_helpers:rpc(Config, 1,
374376
rabbit_vhost_sup_sup, is_vhost_alive, [VHost2]).
375377

378+
vhost_creation_idempotency(Config) ->
379+
VHost = <<"idempotency-test">>,
380+
try
381+
?assertEqual(ok, rabbit_ct_broker_helpers:add_vhost(Config, VHost)),
382+
?assertEqual(ok, rabbit_ct_broker_helpers:add_vhost(Config, VHost)),
383+
?assertEqual(ok, rabbit_ct_broker_helpers:add_vhost(Config, VHost))
384+
after
385+
rabbit_ct_broker_helpers:delete_vhost(Config, VHost)
386+
end.
387+
376388
%% -------------------------------------------------------------------
377389
%% Helpers
378390
%% -------------------------------------------------------------------

0 commit comments

Comments
 (0)