Skip to content

Commit adf601c

Browse files
Merge pull request #9551 from rabbitmq/mergify/bp/v3.12.x/pr-9550
HTTP API: DELETE /api/queues/{vhost}/{name} use internal API call (backport #9550)
2 parents 5a07beb + efa73ea commit adf601c

File tree

2 files changed

+22
-11
lines changed

2 files changed

+22
-11
lines changed

deps/rabbitmq_management/src/rabbit_mgmt_wm_queue.erl

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -71,18 +71,31 @@ accept_content(ReqData, Context) ->
7171
rabbit_mgmt_util:bad_request(iolist_to_binary(io_lib:format(F ++ "~n", A)), ReqData, Context)
7272
end.
7373

74-
delete_resource(ReqData, Context) ->
74+
delete_resource(ReqData, Context = #context{user = #user{username = ActingUser}}) ->
7575
%% We need to retrieve manually if-unused and if-empty, as the HTTP API uses '-'
7676
%% while the record uses '_'
7777
IfUnused = <<"true">> =:= rabbit_mgmt_util:qs_val(<<"if-unused">>, ReqData),
7878
IfEmpty = <<"true">> =:= rabbit_mgmt_util:qs_val(<<"if-empty">>, ReqData),
79-
Name = rabbit_mgmt_util:id(queue, ReqData),
80-
rabbit_mgmt_util:direct_request(
81-
'queue.delete',
82-
fun rabbit_mgmt_format:format_accept_content/1,
83-
[{queue, Name},
84-
{if_unused, IfUnused},
85-
{if_empty, IfEmpty}], "Delete queue error: ~ts", ReqData, Context).
79+
VHost = rabbit_mgmt_util:id(vhost, ReqData),
80+
QName = rabbit_mgmt_util:id(queue, ReqData),
81+
Name = rabbit_misc:r(VHost, queue, QName),
82+
case rabbit_amqqueue:lookup(Name) of
83+
{ok, Q} ->
84+
case rabbit_amqqueue:delete(Q, IfUnused, IfEmpty, ActingUser) of
85+
{ok, _} ->
86+
{true, ReqData, Context};
87+
{error, not_empty} ->
88+
Explanation = io_lib:format("~ts not empty", [rabbit_misc:rs(Name)]),
89+
rabbit_log:warning("Delete queue error: ~ts", [Explanation]),
90+
rabbit_mgmt_util:bad_request(list_to_binary(Explanation), ReqData, Context);
91+
{error, in_use} ->
92+
Explanation = io_lib:format("~ts in use", [rabbit_misc:rs(Name)]),
93+
rabbit_log:warning("Delete queue error: ~ts", [Explanation]),
94+
rabbit_mgmt_util:bad_request(list_to_binary(Explanation), ReqData, Context)
95+
end;
96+
{error, not_found} ->
97+
{true, ReqData, Context}
98+
end.
8699

87100
is_authorized(ReqData, Context) ->
88101
rabbit_mgmt_util:is_authorized_vhost(ReqData, Context).

deps/rabbitmq_management/test/rabbit_mgmt_http_SUITE.erl

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1993,9 +1993,7 @@ queue_purge_test(Config) ->
19931993
http_delete(Config, "/queues/%2F/myqueue/contents", {group, '2xx'}),
19941994
http_delete(Config, "/queues/%2F/badqueue/contents", ?NOT_FOUND),
19951995
http_delete(Config, "/queues/%2F/exclusive/contents", ?BAD_REQUEST),
1996-
http_delete(Config, "/queues/%2F/exclusive", ?BAD_REQUEST),
1997-
#'basic.get_empty'{} =
1998-
amqp_channel:call(Ch, #'basic.get'{queue = <<"myqueue">>}),
1996+
http_delete(Config, "/queues/%2F/exclusive", {group, '2xx'}),
19991997
close_channel(Ch),
20001998
close_connection(Conn),
20011999
http_delete(Config, "/queues/%2F/myqueue", {group, '2xx'}),

0 commit comments

Comments
 (0)