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 | 78377bc08a5674a8e051caa17ecfb72c8a12eaa3 (patch) | |
tree | 82f51d4b2b20630ef5cde4e6188ed7b97fd58162 | |
parent | f4c642ab2985c94531e0794658e56336965edf09 (diff) | |
download | rabbitmq-server-78377bc08a5674a8e051caa17ecfb72c8a12eaa3.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 7723d722..5b31c8ce 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 |