diff options
| author | Emile Joubert <emile@rabbitmq.com> | 2012-12-14 11:51:41 +0000 |
|---|---|---|
| committer | Emile Joubert <emile@rabbitmq.com> | 2012-12-14 11:51:41 +0000 |
| commit | d4d051ae0b5b7cc91195fc330ef7efd2532cc659 (patch) | |
| tree | 4a2c775925ce34c64643ec5fcdf578a37ab2ed61 /src | |
| parent | af9ee097d7ba21fa8d5d5069ac149c8758dd3486 (diff) | |
| download | rabbitmq-server-git-d4d051ae0b5b7cc91195fc330ef7efd2532cc659.tar.gz | |
Better maxdepth checking
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_amqqueue_process.erl | 37 |
1 files changed, 16 insertions, 21 deletions
diff --git a/src/rabbit_amqqueue_process.erl b/src/rabbit_amqqueue_process.erl index 0de9b4e439..b61df6d642 100644 --- a/src/rabbit_amqqueue_process.erl +++ b/src/rabbit_amqqueue_process.erl @@ -584,28 +584,23 @@ deliver_or_enqueue(Delivery = #delivery{message = Message, sender = SenderPid}, State2#q{backing_queue_state = BQS1}) end. -publish_max(Message, Props, Delivered, SenderPid, - State = #q{backing_queue = BQ, - backing_queue_state = BQS, - max_depth = undefined }) -> +publish_max(Message, Props, Delivered, SenderPid, #q{backing_queue = BQ, + backing_queue_state = BQS, + max_depth = undefined }) -> BQ:publish(Message, Props, Delivered, SenderPid, BQS); -publish_max(Message, Props, Delivered, SenderPid, - State = #q{backing_queue = BQ, - backing_queue_state = BQS, - max_depth = MaxDepth }) -> - Depth = BQ:depth(BQS), - case Depth >= MaxDepth of - true -> - Length = BQ:len(BQS), - case Length >= MaxDepth of - false -> - BQS; - true -> - {M, BQS1} = BQ:fetch(false, BQS), - BQ:publish(Message, Props, Delivered, SenderPid, BQS1) - end; - false-> - BQ:publish(Message, Props, Delivered, SenderPid, BQS) +publish_max(Message, Props, Delivered, SenderPid, #q{backing_queue = BQ, + backing_queue_state = BQS, + dlx = XName, + max_depth = MaxDepth }) -> + {Depth, Len} = {BQ:depth(BQS), BQ:len(BQS)}, + case {Depth >= MaxDepth, Len =:= 0} of + {false, _} -> + BQ:publish(Message, Props, Delivered, SenderPid, BQS); + {true, true} -> + BQS; + {true, false} -> + {{Msg, _IsDelivered, AckTag}, BQS1} = BQ:fetch(false, BQS), + BQ:publish(Message, Props, Delivered, SenderPid, BQS1) end. requeue_and_run(AckTags, State = #q{backing_queue = BQ, |
