diff options
author | Matthias Radestock <matthias@rabbitmq.com> | 2012-10-12 19:16:49 +0100 |
---|---|---|
committer | Matthias Radestock <matthias@rabbitmq.com> | 2012-10-12 19:16:49 +0100 |
commit | 6e026d45e83cb9bbde36d1077684b741cbcb43d0 (patch) | |
tree | 9c9c223e1eeedd91d756d780ce4071fedf2b2475 | |
parent | 1bf6475b4e124c5790c87621030ea52bb15a7b07 (diff) | |
download | rabbitmq-server-6e026d45e83cb9bbde36d1077684b741cbcb43d0.tar.gz |
optimise x-message-ttl=0 & confirms path on queue
changes to slave still to come
-rw-r--r-- | src/rabbit_amqqueue_process.erl | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/src/rabbit_amqqueue_process.erl b/src/rabbit_amqqueue_process.erl index 9706efbf..d4834835 100644 --- a/src/rabbit_amqqueue_process.erl +++ b/src/rabbit_amqqueue_process.erl @@ -554,19 +554,21 @@ deliver_or_enqueue(Delivery = #delivery{message = Message, State) -> Confirm = should_confirm_message(Delivery, State), Props = message_properties(Confirm, Delivered, State), - case attempt_delivery(Delivery, Props, State) of + case attempt_delivery(Delivery, Props, + maybe_record_confirm_message(Confirm, State)) of {true, State1} -> - maybe_record_confirm_message(Confirm, State1); + State1; %% the next one is an optimisations - %% TODO: optimise the Confirm =/= never case too - {false, State1 = #q{ttl = 0, dlx = undefined}} when Confirm == never -> - discard_delivery(Delivery, State1); - {false, State1} -> + {false, State1 = #q{ttl = 0, dlx = undefined}} -> + %% fake an 'eventual' confirm from BQ; noop if not needed State2 = #q{backing_queue = BQ, backing_queue_state = BQS} = - maybe_record_confirm_message(Confirm, State1), + confirm_messages([Message#basic_message.id], State1), + BQS1 = BQ:discard(Message, SenderPid, BQS), + State2#q{backing_queue_state = BQS1}; + {false, State1 = #q{backing_queue = BQ, backing_queue_state = BQS}} -> BQS1 = BQ:publish(Message, Props, SenderPid, BQS), ensure_ttl_timer(Props#message_properties.expiry, - State2#q{backing_queue_state = BQS1}) + State1#q{backing_queue_state = BQS1}) end. requeue_and_run(AckTags, State = #q{backing_queue = BQ, @@ -683,12 +685,6 @@ subtract_acks(ChPid, AckTags, State, Fun) -> Fun(State) end. -discard_delivery(#delivery{sender = SenderPid, - message = Message}, - State = #q{backing_queue = BQ, - backing_queue_state = BQS}) -> - State#q{backing_queue_state = BQ:discard(Message, SenderPid, BQS)}. - message_properties(Confirm, Delivered, #q{ttl = TTL}) -> #message_properties{expiry = calculate_msg_expiry(TTL), needs_confirming = needs_confirming(Confirm), |