diff options
| author | Matthias Radestock <matthias@rabbitmq.com> | 2013-09-11 14:57:26 +0100 |
|---|---|---|
| committer | Matthias Radestock <matthias@rabbitmq.com> | 2013-09-11 14:57:26 +0100 |
| commit | de9ef21fb0e34acf70116c6e4994fa13d7afbeb3 (patch) | |
| tree | 3c14dcb06af8f5ea2ee2ae4f358f7da86af7ea7a /src | |
| parent | 139b0097d6c34fc016cb6599a8c8613c9be7010a (diff) | |
| parent | 881c119ad14d9f410d68a845d0dbe1c37438f59f (diff) | |
| download | rabbitmq-server-git-de9ef21fb0e34acf70116c6e4994fa13d7afbeb3.tar.gz | |
merge bug25757 into stable
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_amqqueue.erl | 4 | ||||
| -rw-r--r-- | src/rabbit_amqqueue_process.erl | 10 | ||||
| -rw-r--r-- | src/rabbit_channel.erl | 7 |
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) |
