diff options
| author | Simon MacMullen <simon@rabbitmq.com> | 2011-01-18 11:25:41 +0000 |
|---|---|---|
| committer | Simon MacMullen <simon@rabbitmq.com> | 2011-01-18 11:25:41 +0000 |
| commit | b658abd8ff843e00ea4194223e34174780825dbc (patch) | |
| tree | 755f9ef036721f60bb6e6b4acf101cf5d1e95920 | |
| parent | 7d8ddc459f8a786ada7d77e625eba90592ea57d3 (diff) | |
| parent | 619b95d57bda575d1b639504d7623cf825cc5ba1 (diff) | |
| download | rabbitmq-server-git-b658abd8ff843e00ea4194223e34174780825dbc.tar.gz | |
Merge bug23689 into default.
| -rwxr-xr-x | scripts/rabbitmq-server | 1 | ||||
| -rw-r--r-- | src/rabbit_amqqueue.erl | 44 | ||||
| -rw-r--r-- | src/rabbit_channel.erl | 2 | ||||
| -rw-r--r-- | src/rabbit_tests.erl | 13 |
4 files changed, 27 insertions, 33 deletions
diff --git a/scripts/rabbitmq-server b/scripts/rabbitmq-server index 4155b31d99..5645825431 100755 --- a/scripts/rabbitmq-server +++ b/scripts/rabbitmq-server @@ -119,6 +119,7 @@ exec erl \ -sname ${RABBITMQ_NODENAME} \ -boot ${RABBITMQ_BOOT_FILE} \ ${RABBITMQ_CONFIG_ARG} \ + ${RABBITMQ_CONFIG_ARG} \ +W w \ ${RABBITMQ_SERVER_ERL_ARGS} \ ${RABBITMQ_LISTEN_ARG} \ diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl index 20097a7dec..9626e12617 100644 --- a/src/rabbit_amqqueue.erl +++ b/src/rabbit_amqqueue.erl @@ -212,30 +212,23 @@ declare(QueueName, Durable, AutoDelete, Args, Owner) -> Q1 -> Q1 end. -internal_declare(Q = #amqqueue{name = QueueName}, Recover) -> +internal_declare(Q, true) -> + rabbit_misc:execute_mnesia_tx_with_tail( + fun () -> ok = store_queue(Q), rabbit_misc:const(Q) end); +internal_declare(Q = #amqqueue{name = QueueName}, false) -> rabbit_misc:execute_mnesia_tx_with_tail( fun () -> - case Recover of - true -> - ok = store_queue(Q), - rabbit_misc:const(Q); - false -> - case mnesia:wread({rabbit_queue, QueueName}) of - [] -> - case mnesia:read({rabbit_durable_queue, - QueueName}) of - [] -> ok = store_queue(Q), - B = add_default_binding(Q), - fun (Tx) -> - B(Tx), - Q - end; - [_] -> %% Q exists on stopped node - rabbit_misc:const(not_found) - end; - [ExistingQ] -> - rabbit_misc:const(ExistingQ) - end + case mnesia:wread({rabbit_queue, QueueName}) of + [] -> + case mnesia:read({rabbit_durable_queue, QueueName}) of + [] -> ok = store_queue(Q), + B = add_default_binding(Q), + fun (Tx) -> B(Tx), Q end; + [_] -> %% Q exists on stopped node + rabbit_misc:const(not_found) + end; + [ExistingQ] -> + rabbit_misc:const(ExistingQ) end end). @@ -494,10 +487,9 @@ on_node_down(Node) -> end, fun (Deletions, Tx) -> rabbit_binding:process_deletions( - lists:foldl( - fun rabbit_binding:combine_deletions/2, - rabbit_binding:new_deletions(), - Deletions), + lists:foldl(fun rabbit_binding:combine_deletions/2, + rabbit_binding:new_deletions(), + Deletions), Tx) end). diff --git a/src/rabbit_channel.erl b/src/rabbit_channel.erl index 1e9096862b..5c900b0b87 100644 --- a/src/rabbit_channel.erl +++ b/src/rabbit_channel.erl @@ -283,7 +283,7 @@ handle_cast(emit_stats, State = #ch{stats_timer = StatsTimer}) -> hibernate}; handle_cast({confirm, MsgSeqNos, From}, State) -> - {noreply, confirm(MsgSeqNos, From, State)}. + {noreply, confirm(MsgSeqNos, From, State), hibernate}. handle_info({'DOWN', _MRef, process, QPid, _Reason}, State = #ch{unconfirmed = UC}) -> diff --git a/src/rabbit_tests.erl b/src/rabbit_tests.erl index d913092cce..1709ef3c65 100644 --- a/src/rabbit_tests.erl +++ b/src/rabbit_tests.erl @@ -2092,12 +2092,13 @@ test_queue_recover() -> TxID = rabbit_guid:guid(), {new, #amqqueue { pid = QPid, name = QName }} = rabbit_amqqueue:declare(test_queue(), true, false, [], none), - Msg = rabbit_basic:message(rabbit_misc:r(<<>>, exchange, <<>>), - <<>>, #'P_basic'{delivery_mode = 2}, <<>>), - Delivery = #delivery{mandatory = false, immediate = false, txn = TxID, - sender = self(), message = Msg}, - [true = rabbit_amqqueue:deliver(QPid, Delivery) || - _ <- lists:seq(1, Count)], + [begin + Msg = rabbit_basic:message(rabbit_misc:r(<<>>, exchange, <<>>), + <<>>, #'P_basic'{delivery_mode = 2}, <<>>), + Delivery = #delivery{mandatory = false, immediate = false, txn = TxID, + sender = self(), message = Msg}, + true = rabbit_amqqueue:deliver(QPid, Delivery) + end || _ <- lists:seq(1, Count)], rabbit_amqqueue:commit_all([QPid], TxID, self()), exit(QPid, kill), MRef = erlang:monitor(process, QPid), |
