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 | 0baa49fc9ec9e642a222744b66c5830f8c9c6e9f (patch) | |
tree | 755f9ef036721f60bb6e6b4acf101cf5d1e95920 | |
parent | 259b9ce305813f625b237208523998283c6e0cc0 (diff) | |
parent | 8ab52000e6720a3e6e0fe467c7e69c5fe677cbfc (diff) | |
download | rabbitmq-server-0baa49fc9ec9e642a222744b66c5830f8c9c6e9f.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 4155b31d..56458254 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 20097a7d..9626e126 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 1e909686..5c900b0b 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 d913092c..1709ef3c 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), |