diff options
author | Alexandru Scvortov <alexandru@rabbitmq.com> | 2010-09-29 15:41:54 +0100 |
---|---|---|
committer | Alexandru Scvortov <alexandru@rabbitmq.com> | 2010-09-29 15:41:54 +0100 |
commit | 2c3af402db90a169c6f9da5219d439b5707c19d0 (patch) | |
tree | 823c71f9590f77f8a211370dacf7515cdbc5a55d /src/rabbit_router.erl | |
parent | f1f42f3fd28518b350cf398f8e85b01ba49755a7 (diff) | |
download | rabbitmq-server-2c3af402db90a169c6f9da5219d439b5707c19d0.tar.gz |
no more redundant message passing
Diffstat (limited to 'src/rabbit_router.erl')
-rw-r--r-- | src/rabbit_router.erl | 18 |
1 files changed, 4 insertions, 14 deletions
diff --git a/src/rabbit_router.erl b/src/rabbit_router.erl index e5ffe863..707698b0 100644 --- a/src/rabbit_router.erl +++ b/src/rabbit_router.erl @@ -58,8 +58,7 @@ %%---------------------------------------------------------------------------- deliver(QPids, Delivery = #delivery{mandatory = false, - immediate = false, - msg_seq_no = MsgSeqNo}) -> + immediate = false}) -> %% optimisation: when Mandatory = false and Immediate = false, %% rabbit_amqqueue:deliver will deliver the message to the queue %% process asynchronously, and return true, which means all the @@ -69,10 +68,9 @@ deliver(QPids, Delivery = #delivery{mandatory = false, %% case below. delegate:invoke_no_result( QPids, fun (Pid) -> rabbit_amqqueue:deliver(Pid, Delivery) end), - maybe_inform_channel(MsgSeqNo, QPids), {routed, QPids}; -deliver(QPids, Delivery = #delivery{msg_seq_no = MsgSeqNo}) -> +deliver(QPids, Delivery) -> {Success, _} = delegate:invoke(QPids, fun (Pid) -> @@ -82,11 +80,8 @@ deliver(QPids, Delivery = #delivery{msg_seq_no = MsgSeqNo}) -> lists:foldl(fun fold_deliveries/2, {false, []}, Success), case check_delivery(Delivery#delivery.mandatory, Delivery#delivery.immediate, {Routed, Handled}) of - {routed, Qs} -> - maybe_inform_channel(MsgSeqNo, Qs), - {routed, Qs}; - O -> - O + {routed, Qs} -> {routed, Qs}; + O -> O end. %% TODO: Maybe this should be handled by a cursor instead. @@ -125,8 +120,3 @@ fold_deliveries({_, false},{_, Handled}) -> {true, Handled}. check_delivery(true, _ , {false, []}) -> {unroutable, []}; check_delivery(_ , true, {_ , []}) -> {not_delivered, []}; check_delivery(_ , _ , {_ , Qs}) -> {routed, Qs}. - -maybe_inform_channel(undefined, _) -> - ok; -maybe_inform_channel(MsgSeqNo, QPids) -> - gen_server2:cast(self(), {msg_sent_to_queues, MsgSeqNo, QPids}). |