summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Klishin <michael@novemberain.com>2019-02-18 21:50:33 +0300
committerGitHub <noreply@github.com>2019-02-18 21:50:33 +0300
commitd680193af3d43b04e15ce66abe1ec895f2562c77 (patch)
tree9105a1d8627a0369e55d3d5d849b829792985fda
parentf6d93688a71bb765c91fe2cc3bba6e729d5fae5e (diff)
parentbcb0f50879d935bebba8a4b880a66c44829b0d91 (diff)
downloadrabbitmq-server-git-d680193af3d43b04e15ce66abe1ec895f2562c77.tar.gz
Merge pull request #1888 from rabbitmq/rabbitmq-server-1887
Check exclusive owner before durable argument
-rw-r--r--src/rabbit_amqqueue.erl18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl
index dbf8693a96..5488a88836 100644
--- a/src/rabbit_amqqueue.erl
+++ b/src/rabbit_amqqueue.erl
@@ -616,14 +616,14 @@ priv_absent(QueueName, _QPid, _IsDurable, timeout) ->
rabbit_framing:amqp_table(), rabbit_types:maybe(pid())) ->
'ok' | rabbit_types:channel_exit() | rabbit_types:connection_exit().
-assert_equivalence(Q, Durable1, AD1, Args1, Owner) ->
+assert_equivalence(Q, DurableDeclare, AutoDeleteDeclare, Args1, Owner) ->
QName = amqqueue:get_name(Q),
- Durable = amqqueue:is_durable(Q),
- AD = amqqueue:is_auto_delete(Q),
- rabbit_misc:assert_field_equivalence(Durable, Durable1, QName, durable),
- rabbit_misc:assert_field_equivalence(AD, AD1, QName, auto_delete),
- assert_args_equivalence(Q, Args1),
- check_exclusive_access(Q, Owner, strict).
+ DurableQ = amqqueue:is_durable(Q),
+ AutoDeleteQ = amqqueue:is_auto_delete(Q),
+ ok = check_exclusive_access(Q, Owner, strict),
+ ok = rabbit_misc:assert_field_equivalence(DurableQ, DurableDeclare, QName, durable),
+ ok = rabbit_misc:assert_field_equivalence(AutoDeleteQ, AutoDeleteDeclare, QName, auto_delete),
+ ok = assert_args_equivalence(Q, Args1).
-spec check_exclusive_access(amqqueue:amqqueue(), pid()) ->
'ok' | rabbit_types:channel_exit().
@@ -640,7 +640,9 @@ check_exclusive_access(Q, _ReaderPid, _MatchType) ->
QueueName = amqqueue:get_name(Q),
rabbit_misc:protocol_error(
resource_locked,
- "cannot obtain exclusive access to locked ~s",
+ "cannot obtain exclusive access to locked ~s. It could be originally "
+ "declared on another connection or the exclusive property value does not "
+ "match that of the original declaration.",
[rabbit_misc:rs(QueueName)]).
-spec with_exclusive_access_or_die(name(), pid(), qfun(A)) ->