diff options
| author | Alexandru Scvortov <alexandru@rabbitmq.com> | 2010-10-04 10:35:21 +0100 |
|---|---|---|
| committer | Alexandru Scvortov <alexandru@rabbitmq.com> | 2010-10-04 10:35:21 +0100 |
| commit | f1bf011088aa96c6643ef7c7112a4a57861da922 (patch) | |
| tree | 82f51d4b2b20630ef5cde4e6188ed7b97fd58162 | |
| parent | c7d1d1403cfddd7f9b75f32bea27fb168d672d3b (diff) | |
| download | rabbitmq-server-git-f1bf011088aa96c6643ef7c7112a4a57861da922.tar.gz | |
only confirm immediate messages if they haven't been delivered
| -rw-r--r-- | src/rabbit_amqqueue_process.erl | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/rabbit_amqqueue_process.erl b/src/rabbit_amqqueue_process.erl index 7723d7229e..5b31c8ce79 100644 --- a/src/rabbit_amqqueue_process.erl +++ b/src/rabbit_amqqueue_process.erl @@ -699,7 +699,8 @@ handle_call(consumers, _From, [{ChPid, ConsumerTag, AckRequired} | Acc] end, [], queue:join(ActiveConsumers, BlockedConsumers)), State); -handle_call({deliver_immediately, Delivery}, _From, State) -> +handle_call({deliver_immediately, Delivery = #delivery{message = Msg}} + , _From, State) -> %% Synchronous, "immediate" delivery mode %% %% FIXME: Is this correct semantics? @@ -713,10 +714,13 @@ handle_call({deliver_immediately, Delivery}, _From, State) -> %% just all ready-to-consume queues get the message, with unready %% queues discarding the message? %% - {Delivered, NewState} = attempt_delivery(Delivery, State), - reply(Delivered, - confirm_message(Delivery#delivery.message#basic_message.guid, - record_confirm_message(Delivery, NewState))); + State1 = record_confirm_message(Delivery, State), + {Delivered, State2} = attempt_delivery(Delivery, State1), + State3 = case Delivered of + true -> State2, + false -> confirm_message(Msg#basic_message.guid, State2) + end, + reply(Delivered, State3); handle_call({deliver, Delivery}, _From, State) -> %% Synchronous, "mandatory" delivery mode |
