diff options
| author | Michael Klishin <michael@novemberain.com> | 2019-02-18 21:50:33 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-02-18 21:50:33 +0300 |
| commit | d680193af3d43b04e15ce66abe1ec895f2562c77 (patch) | |
| tree | 9105a1d8627a0369e55d3d5d849b829792985fda | |
| parent | f6d93688a71bb765c91fe2cc3bba6e729d5fae5e (diff) | |
| parent | bcb0f50879d935bebba8a4b880a66c44829b0d91 (diff) | |
| download | rabbitmq-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.erl | 18 |
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)) -> |
