summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Radestock <matthias@rabbitmq.com>2013-01-08 17:35:25 +0000
committerMatthias Radestock <matthias@rabbitmq.com>2013-01-08 17:35:25 +0000
commit06ed05a9ab5b603aa20b022c4463f89f8b76c582 (patch)
treef06cdbdaa6358e4b03d371795978e022c09e20ca
parent407e13690972f66e52a6b67dfd38327a0d6b4c09 (diff)
parent178bced7388484966b83bd5608ca4014ec868fa5 (diff)
downloadrabbitmq-server-06ed05a9ab5b603aa20b022c4463f89f8b76c582.tar.gz
merge heads
-rw-r--r--src/rabbit_mirror_queue_slave.erl21
1 files changed, 10 insertions, 11 deletions
diff --git a/src/rabbit_mirror_queue_slave.erl b/src/rabbit_mirror_queue_slave.erl
index 53564f09..feddf45a 100644
--- a/src/rabbit_mirror_queue_slave.erl
+++ b/src/rabbit_mirror_queue_slave.erl
@@ -257,8 +257,12 @@ handle_cast({set_ram_duration_target, Duration},
handle_info(update_ram_duration, State = #state{backing_queue = BQ,
backing_queue_state = BQS}) ->
- noreply(State#state{rate_timer_ref = just_measured,
- backing_queue_state = update_ram_duration(BQ, BQS)});
+ BQS1 = update_ram_duration(BQ, BQS),
+ %% Don't call noreply/1, we don't want to set timers
+ {State1, Timeout} = next_state(State #state {
+ rate_timer_ref = undefined,
+ backing_queue_state = BQS1 }),
+ {noreply, State1, Timeout};
handle_info(sync_timeout, State) ->
noreply(backing_queue_timeout(
@@ -566,17 +570,16 @@ promote_me(From, #state { q = Q = #amqqueue { name = QName },
noreply(State) ->
{NewState, Timeout} = next_state(State),
- {noreply, NewState, Timeout}.
+ {noreply, ensure_rate_timer(NewState), Timeout}.
reply(Reply, State) ->
{NewState, Timeout} = next_state(State),
- {reply, Reply, NewState, Timeout}.
+ {reply, Reply, ensure_rate_timer(NewState), Timeout}.
next_state(State = #state{backing_queue = BQ, backing_queue_state = BQS}) ->
{MsgIds, BQS1} = BQ:drain_confirmed(BQS),
- State1 = ensure_rate_timer(
- confirm_messages(MsgIds, State #state {
- backing_queue_state = BQS1 })),
+ State1 = confirm_messages(MsgIds,
+ State #state { backing_queue_state = BQS1 }),
case BQ:needs_timeout(BQS1) of
false -> {stop_sync_timer(State1), hibernate };
idle -> {stop_sync_timer(State1), ?SYNC_INTERVAL};
@@ -602,15 +605,11 @@ ensure_rate_timer(State = #state { rate_timer_ref = undefined }) ->
TRef = erlang:send_after(?RAM_DURATION_UPDATE_INTERVAL,
self(), update_ram_duration),
State #state { rate_timer_ref = TRef };
-ensure_rate_timer(State = #state { rate_timer_ref = just_measured }) ->
- State #state { rate_timer_ref = undefined };
ensure_rate_timer(State) ->
State.
stop_rate_timer(State = #state { rate_timer_ref = undefined }) ->
State;
-stop_rate_timer(State = #state { rate_timer_ref = just_measured }) ->
- State #state { rate_timer_ref = undefined };
stop_rate_timer(State = #state { rate_timer_ref = TRef }) ->
erlang:cancel_timer(TRef),
State #state { rate_timer_ref = undefined }.