diff options
| author | Matthew Sackman <matthew@lshift.net> | 2009-06-23 17:05:31 +0100 |
|---|---|---|
| committer | Matthew Sackman <matthew@lshift.net> | 2009-06-23 17:05:31 +0100 |
| commit | d2d83a73310a420656fad07007ba5a14a74938e2 (patch) | |
| tree | 439e42bcd03e4f735983d3f7fac992b07bc786a6 /src | |
| parent | de6a18c21c898d3b50289af08a16d6a4bd807af2 (diff) | |
| parent | 36d6cbebf04f68ad8563a71fafb064459695ae8a (diff) | |
| download | rabbitmq-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.erl | 27 |
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 }. |
