summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Newson <rnewson@apache.org>2014-09-01 19:20:09 +0100
committerRobert Newson <rnewson@apache.org>2014-09-01 19:20:09 +0100
commit04aea732058c5f0b7081b1fa444dbf4b3761cd02 (patch)
tree93a0cfa4dd419f6c370df5856aa4908636367b0c
parent6293a8b88d1cd67c254ac764a046a1c3a0905be4 (diff)
downloadcouchdb-04aea732058c5f0b7081b1fa444dbf4b3761cd02.tar.gz
new IOQ api
-rw-r--r--src/ioq.erl12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/ioq.erl b/src/ioq.erl
index 686a6964c..4983b73d6 100644
--- a/src/ioq.erl
+++ b/src/ioq.erl
@@ -13,7 +13,7 @@
-module(ioq).
-behaviour(gen_server).
--export([start_link/0, call/2]).
+-export([start_link/0, call/3]).
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, code_change/3, terminate/2]).
-record(state, {
@@ -27,7 +27,7 @@
-record(request, {
fd,
msg,
- class,
+ priority,
from,
ref
}).
@@ -35,8 +35,8 @@
start_link() ->
gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
-call(Fd, Msg) ->
- Request = #request{fd=Fd, msg=Msg, class=get(io_class), from=self()},
+call(Fd, Msg, Priority) ->
+ Request = #request{fd=Fd, msg=Msg, priority=Priority, from=self()},
gen_server:call(?MODULE, Request, infinity).
init(_) ->
@@ -77,7 +77,9 @@ code_change(_Vsn, State, _Extra) ->
terminate(_Reason, _State) ->
ok.
-enqueue_request(#request{class=compaction}=Request, #state{}=State) ->
+enqueue_request(#request{priority={db_compact, _}}=Request, #state{}=State) ->
+ State#state{compaction=queue:in(Request, State#state.compaction)};
+enqueue_request(#request{priority={view_compact, _, _}}=Request, #state{}=State) ->
State#state{compaction=queue:in(Request, State#state.compaction)};
enqueue_request(#request{}=Request, #state{}=State) ->
State#state{interactive=queue:in(Request, State#state.interactive)}.