summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2011-01-18 11:25:41 +0000
committerSimon MacMullen <simon@rabbitmq.com>2011-01-18 11:25:41 +0000
commit0baa49fc9ec9e642a222744b66c5830f8c9c6e9f (patch)
tree755f9ef036721f60bb6e6b4acf101cf5d1e95920
parent259b9ce305813f625b237208523998283c6e0cc0 (diff)
parent8ab52000e6720a3e6e0fe467c7e69c5fe677cbfc (diff)
downloadrabbitmq-server-0baa49fc9ec9e642a222744b66c5830f8c9c6e9f.tar.gz
Merge bug23689 into default.
-rwxr-xr-xscripts/rabbitmq-server1
-rw-r--r--src/rabbit_amqqueue.erl44
-rw-r--r--src/rabbit_channel.erl2
-rw-r--r--src/rabbit_tests.erl13
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),