summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthew Sackman <matthew@lshift.net>2009-06-23 17:05:31 +0100
committerMatthew Sackman <matthew@lshift.net>2009-06-23 17:05:31 +0100
commitd2d83a73310a420656fad07007ba5a14a74938e2 (patch)
tree439e42bcd03e4f735983d3f7fac992b07bc786a6 /src
parentde6a18c21c898d3b50289af08a16d6a4bd807af2 (diff)
parent36d6cbebf04f68ad8563a71fafb064459695ae8a (diff)
downloadrabbitmq-server-git-d2d83a73310a420656fad07007ba5a14a74938e2.tar.gz
merging in the recent non-tx performance fix in bug20470
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_disk_queue.erl27
1 files changed, 16 insertions, 11 deletions
diff --git a/src/rabbit_disk_queue.erl b/src/rabbit_disk_queue.erl
index de31b2388c..26d0c8dcce 100644
--- a/src/rabbit_disk_queue.erl
+++ b/src/rabbit_disk_queue.erl
@@ -514,10 +514,11 @@ handle_cast({change_memory_footprint, Conserve}, State) ->
handle_info({'EXIT', _Pid, Reason}, State) ->
{stop, Reason, State};
-handle_info(timeout, State = #dqstate { current_dirty = true }) ->
+handle_info(timeout, State = #dqstate { timer_ref = TRef })
+ when TRef /= undefined ->
noreply(sync_current_file_handle(State));
handle_info(_Info, State) ->
- {noreply, State}.
+ noreply(State).
terminate(_Reason, State) ->
shutdown(State).
@@ -575,15 +576,23 @@ to_ram_disk_mode(State = #dqstate { operation_mode = disk_only,
ok = dets:delete_all_objects(MsgLocationDets),
State #dqstate { operation_mode = ram_disk }.
-noreply(NewState = #dqstate { current_dirty = true }) ->
+noreply(NewState = #dqstate { on_sync_froms = [], timer_ref = undefined }) ->
+ {noreply, NewState, infinity};
+noreply(NewState = #dqstate { timer_ref = undefined }) ->
{noreply, start_commit_timer(NewState), 0};
+noreply(NewState = #dqstate { on_sync_froms = [] }) ->
+ {noreply, stop_commit_timer(NewState), infinity};
noreply(NewState) ->
- {noreply, stop_commit_timer(NewState), infinity}.
+ {noreply, NewState, 0}.
-reply(Reply, NewState = #dqstate { current_dirty = true }) ->
+reply(Reply, NewState = #dqstate { on_sync_froms = [], timer_ref = undefined }) ->
+ {reply, Reply, NewState, infinity};
+reply(Reply, NewState = #dqstate { timer_ref = undefined }) ->
{reply, Reply, start_commit_timer(NewState), 0};
+reply(Reply, NewState = #dqstate { on_sync_froms = [] }) ->
+ {reply, Reply, stop_commit_timer(NewState), infinity};
reply(Reply, NewState) ->
- {reply, Reply, stop_commit_timer(NewState), infinity}.
+ {reply, Reply, NewState, 0}.
form_filename(Name) ->
filename:join(base_directory(), Name).
@@ -728,12 +737,8 @@ sequence_lookup(Sequences, Q) ->
start_commit_timer(State = #dqstate { timer_ref = undefined }) ->
{ok, TRef} = timer:apply_after(?SYNC_INTERVAL, ?MODULE, filesync, []),
- State #dqstate { timer_ref = TRef };
-start_commit_timer(State) ->
- State.
+ State #dqstate { timer_ref = TRef }.
-stop_commit_timer(State = #dqstate { timer_ref = undefined }) ->
- State;
stop_commit_timer(State = #dqstate { timer_ref = TRef }) ->
{ok, cancel} = timer:cancel(TRef),
State #dqstate { timer_ref = undefined }.