summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthias Radestock <matthias@rabbitmq.com>2013-09-11 14:57:26 +0100
committerMatthias Radestock <matthias@rabbitmq.com>2013-09-11 14:57:26 +0100
commitde9ef21fb0e34acf70116c6e4994fa13d7afbeb3 (patch)
tree3c14dcb06af8f5ea2ee2ae4f358f7da86af7ea7a /src
parent139b0097d6c34fc016cb6599a8c8613c9be7010a (diff)
parent881c119ad14d9f410d68a845d0dbe1c37438f59f (diff)
downloadrabbitmq-server-git-de9ef21fb0e34acf70116c6e4994fa13d7afbeb3.tar.gz
merge bug25757 into stable
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_amqqueue.erl4
-rw-r--r--src/rabbit_amqqueue_process.erl10
-rw-r--r--src/rabbit_channel.erl7
3 files changed, 10 insertions, 11 deletions
diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl
index a1efaf65cc..32feac3019 100644
--- a/src/rabbit_amqqueue.erl
+++ b/src/rabbit_amqqueue.erl
@@ -72,8 +72,8 @@
-spec(declare/5 ::
(name(), boolean(), boolean(),
rabbit_framing:amqp_table(), rabbit_types:maybe(pid()))
- -> {'new' | 'existing' | 'absent', rabbit_types:amqqueue()} |
- rabbit_types:channel_exit()).
+ -> {'new' | 'existing' | 'absent' | 'owner_died',
+ rabbit_types:amqqueue()} | rabbit_types:channel_exit()).
-spec(internal_declare/2 ::
(rabbit_types:amqqueue(), boolean())
-> queue_or_absent() | rabbit_misc:thunk(queue_or_absent())).
diff --git a/src/rabbit_amqqueue_process.erl b/src/rabbit_amqqueue_process.erl
index 05a149270e..add75d8991 100644
--- a/src/rabbit_amqqueue_process.erl
+++ b/src/rabbit_amqqueue_process.erl
@@ -1069,14 +1069,8 @@ handle_call({init, Recover}, From,
declare(Recover, From, State);
false -> #q{backing_queue = undefined,
backing_queue_state = undefined,
- q = #amqqueue{name = QName} = Q} = State,
- gen_server2:reply(From, not_found),
- case Recover of
- new -> rabbit_log:warning(
- "exclusive owner for ~s went away~n",
- [rabbit_misc:rs(QName)]);
- _ -> ok
- end,
+ q = Q} = State,
+ gen_server2:reply(From, {owner_died, Q}),
BQ = backing_queue_module(Q),
BQS = bq_init(BQ, Q, Recover),
%% Rely on terminate to delete the queue.
diff --git a/src/rabbit_channel.erl b/src/rabbit_channel.erl
index d6c1e8c0dc..6c04f4cd29 100644
--- a/src/rabbit_channel.erl
+++ b/src/rabbit_channel.erl
@@ -1021,7 +1021,12 @@ handle_method(#'queue.declare'{queue = QueueNameBin,
%% declare. Loop around again.
handle_method(Declare, none, State);
{absent, Q} ->
- rabbit_misc:absent(Q)
+ rabbit_misc:absent(Q);
+ {owner_died, _Q} ->
+ %% Presumably our own days are numbered since the
+ %% connection has died. Pretend the queue exists though,
+ %% just so nothing fails.
+ return_queue_declare_ok(QueueName, NoWait, 0, 0, State)
end;
{error, {absent, Q}} ->
rabbit_misc:absent(Q)