summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell Branca <chewbranca@apache.org>2022-07-25 16:27:02 -0700
committerGitHub <noreply@github.com>2022-07-25 16:27:02 -0700
commit74f12c74d393fc1a35fee3fe1fbf5db372525879 (patch)
treeea27109a07b3f2f5895e37e4c7bc65bcfc9aec7e
parenta45e82aa1a5efed10bfe97fcfdc53ee5d5fc689f (diff)
parentc09cd89680b28f0f901297710894060da4b428ef (diff)
downloadcouchdb-74f12c74d393fc1a35fee3fe1fbf5db372525879.tar.gz
Merge pull request #4106 from apache/4101-add-io-priority
4101 add io priority
-rw-r--r--src/chttpd/src/chttpd.app.src3
-rw-r--r--src/chttpd/src/chttpd_auth_cache.erl6
-rw-r--r--src/couch_index/src/couch_index.app.src2
-rw-r--r--src/couch_index/src/couch_index.erl1
-rw-r--r--src/couch_peruser/src/couch_peruser.app.src2
-rw-r--r--src/couch_peruser/src/couch_peruser.erl2
-rw-r--r--src/couch_replicator/src/couch_replicator.app.src3
-rw-r--r--src/couch_replicator/src/couch_replicator_docs.erl2
-rw-r--r--src/global_changes/src/global_changes.app.src3
-rw-r--r--src/global_changes/src/global_changes_server.erl5
-rw-r--r--src/ioq/src/ioq.erl19
-rw-r--r--src/mem3/src/mem3.app.src3
-rw-r--r--src/mem3/src/mem3_nodes.erl7
-rw-r--r--src/mem3/src/mem3_shards.erl6
-rw-r--r--src/mem3/src/mem3_util.erl3
15 files changed, 55 insertions, 12 deletions
diff --git a/src/chttpd/src/chttpd.app.src b/src/chttpd/src/chttpd.app.src
index bc899b1a2..d48f02b97 100644
--- a/src/chttpd/src/chttpd.app.src
+++ b/src/chttpd/src/chttpd.app.src
@@ -27,7 +27,8 @@
config,
couch,
ets_lru,
- fabric
+ fabric,
+ ioq
]},
{mod, {chttpd_app, []}}
]}.
diff --git a/src/chttpd/src/chttpd_auth_cache.erl b/src/chttpd/src/chttpd_auth_cache.erl
index 2173eca95..36157ed38 100644
--- a/src/chttpd/src/chttpd_auth_cache.erl
+++ b/src/chttpd/src/chttpd_auth_cache.erl
@@ -155,7 +155,9 @@ spawn_changes(Since) ->
Pid.
listen_for_changes(Since) ->
- ensure_auth_ddoc_exists(dbname(), <<"_design/_auth">>),
+ DbName = dbname(),
+ ioq:set_io_priority({system, DbName}),
+ ensure_auth_ddoc_exists(DbName, <<"_design/_auth">>),
CBFun = fun ?MODULE:changes_callback/2,
Args = #changes_args{
feed = "continuous",
@@ -163,7 +165,7 @@ listen_for_changes(Since) ->
heartbeat = true,
filter = {default, main_only}
},
- fabric:changes(dbname(), CBFun, Since, Args).
+ fabric:changes(DbName, CBFun, Since, Args).
changes_callback(waiting_for_updates, Acc) ->
{ok, Acc};
diff --git a/src/couch_index/src/couch_index.app.src b/src/couch_index/src/couch_index.app.src
index 834be3f3c..e452313b6 100644
--- a/src/couch_index/src/couch_index.app.src
+++ b/src/couch_index/src/couch_index.app.src
@@ -14,6 +14,6 @@
{description, "CouchDB Secondary Index Manager"},
{vsn, git},
{registered, []},
- {applications, [kernel, stdlib, couch_epi]},
+ {applications, [kernel, stdlib, couch_epi, ioq]},
{mod, {couch_index_app, []}}
]}.
diff --git a/src/couch_index/src/couch_index.erl b/src/couch_index/src/couch_index.erl
index a6b62be7c..67a34e94a 100644
--- a/src/couch_index/src/couch_index.erl
+++ b/src/couch_index/src/couch_index.erl
@@ -72,6 +72,7 @@ get_compactor_pid(Pid) ->
init({Mod, IdxState}) ->
DbName = Mod:get(db_name, IdxState),
+ ioq:set_io_priority({view_update, DbName}),
erlang:send_after(?CHECK_INTERVAL, self(), maybe_close),
Resp = couch_util:with_db(DbName, fun(Db) ->
case Mod:open(Db, IdxState) of
diff --git a/src/couch_peruser/src/couch_peruser.app.src b/src/couch_peruser/src/couch_peruser.app.src
index 6cfaf4421..fcdcb4f9d 100644
--- a/src/couch_peruser/src/couch_peruser.app.src
+++ b/src/couch_peruser/src/couch_peruser.app.src
@@ -14,7 +14,7 @@
{description, "couch_peruser - maintains per-user databases in CouchDB"},
{vsn, git},
{registered, [couch_peruser, couch_peruser_sup]},
- {applications, [kernel, stdlib, config, couch, fabric, mem3]},
+ {applications, [kernel, stdlib, config, couch, fabric, mem3, ioq]},
{mod, {couch_peruser_app, []}},
{env, []}
]}.
diff --git a/src/couch_peruser/src/couch_peruser.erl b/src/couch_peruser/src/couch_peruser.erl
index c87ffb2fb..7a6aec06f 100644
--- a/src/couch_peruser/src/couch_peruser.erl
+++ b/src/couch_peruser/src/couch_peruser.erl
@@ -85,6 +85,7 @@ init_state() ->
"couch_httpd_auth", "authentication_db", "_users"
)
),
+ ioq:set_io_priority({system, DbName}),
DeleteDbs = config:get_boolean("couch_peruser", "delete_dbs", false),
Q = config:get_integer("couch_peruser", "q", 1),
Prefix = config:get("couch_peruser", "database_prefix", ?DEFAULT_USERDB_PREFIX),
@@ -186,6 +187,7 @@ start_listening(
-spec init_changes_handler(ChangesState :: #changes_state{}) -> ok.
init_changes_handler(#changes_state{db_name = DbName} = ChangesState) ->
% couch_log:debug("peruser: init_changes_handler() on DbName ~p", [DbName]),
+ ioq:set_io_priority({system, DbName}),
try
{ok, Db} = couch_db:open_int(DbName, [?ADMIN_CTX, sys_db]),
FunAcc = {fun ?MODULE:changes_handler/3, ChangesState},
diff --git a/src/couch_replicator/src/couch_replicator.app.src b/src/couch_replicator/src/couch_replicator.app.src
index 2e0e191d3..7cc0fd108 100644
--- a/src/couch_replicator/src/couch_replicator.app.src
+++ b/src/couch_replicator/src/couch_replicator.app.src
@@ -32,6 +32,7 @@
config,
couch,
couch_event,
- couch_stats
+ couch_stats,
+ ioq
]}
]}.
diff --git a/src/couch_replicator/src/couch_replicator_docs.erl b/src/couch_replicator/src/couch_replicator_docs.erl
index 7bdf00bf9..a80abe901 100644
--- a/src/couch_replicator/src/couch_replicator_docs.erl
+++ b/src/couch_replicator/src/couch_replicator_docs.erl
@@ -357,6 +357,7 @@ update_rep_doc(RepDbName, #doc{body = {RepDocBody}} = RepDoc, KVs, _Try) ->
end.
open_rep_doc(DbName, DocId) ->
+ ioq:maybe_set_io_priority({system, DbName}),
case couch_db:open_int(DbName, [?CTX, sys_db]) of
{ok, Db} ->
try
@@ -369,6 +370,7 @@ open_rep_doc(DbName, DocId) ->
end.
save_rep_doc(DbName, Doc) ->
+ ioq:maybe_set_io_priority({system, DbName}),
{ok, Db} = couch_db:open_int(DbName, [?CTX, sys_db]),
try
couch_db:update_doc(Db, Doc, [])
diff --git a/src/global_changes/src/global_changes.app.src b/src/global_changes/src/global_changes.app.src
index a1dc2f38b..757387a05 100644
--- a/src/global_changes/src/global_changes.app.src
+++ b/src/global_changes/src/global_changes.app.src
@@ -23,7 +23,8 @@
couch_stats,
couch,
mem3,
- fabric
+ fabric,
+ ioq
]},
{mod, {global_changes_app, []}},
{env, [
diff --git a/src/global_changes/src/global_changes_server.erl b/src/global_changes/src/global_changes_server.erl
index e4902e207..e9a9c5fb4 100644
--- a/src/global_changes/src/global_changes_server.erl
+++ b/src/global_changes/src/global_changes_server.erl
@@ -60,6 +60,9 @@ init([]) ->
end,
MaxWriteDelay = list_to_integer(MaxWriteDelay0),
+ GlobalChangesDbName = global_changes_util:get_dbname(),
+ ioq:set_io_priority({system, GlobalChangesDbName}),
+
% Start our write triggers
erlang:send_after(MaxWriteDelay, self(), flush_updates),
@@ -68,7 +71,7 @@ init([]) ->
pending_update_count = 0,
pending_updates = sets:new(),
max_write_delay = MaxWriteDelay,
- dbname = global_changes_util:get_dbname(),
+ dbname = GlobalChangesDbName,
handler_ref = erlang:monitor(process, Handler)
},
{ok, State}.
diff --git a/src/ioq/src/ioq.erl b/src/ioq/src/ioq.erl
index 51934d544..945e455ce 100644
--- a/src/ioq/src/ioq.erl
+++ b/src/ioq/src/ioq.erl
@@ -16,6 +16,7 @@
-export([start_link/0, call/3]).
-export([get_queue_lengths/0]).
+-export([get_io_priority/0, set_io_priority/1, maybe_set_io_priority/1]).
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, code_change/3, terminate/2]).
% config_listener api
@@ -39,6 +40,18 @@
ref
}).
+set_io_priority(Priority) ->
+ erlang:put(io_priority, Priority).
+
+get_io_priority() ->
+ erlang:get(io_priority).
+
+maybe_set_io_priority(Priority) ->
+ case get_io_priority() of
+ undefined -> set_io_priority(Priority);
+ _ -> ok
+ end.
+
start_link() ->
gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
@@ -81,6 +94,12 @@ io_class(_, {db_compact, _}) ->
compaction;
io_class(_, {view_compact, _, _}) ->
compaction;
+io_class(_, {system, _}) ->
+ system;
+io_class(_, {search, _}) ->
+ search;
+io_class(_, {search, _, _}) ->
+ search;
io_class(_, _) ->
other.
diff --git a/src/mem3/src/mem3.app.src b/src/mem3/src/mem3.app.src
index 889ebf9a3..824ff9916 100644
--- a/src/mem3/src/mem3.app.src
+++ b/src/mem3/src/mem3.app.src
@@ -35,6 +35,7 @@
rexi,
couch_log,
couch_event,
- couch_stats
+ couch_stats,
+ ioq
]}
]}.
diff --git a/src/mem3/src/mem3_nodes.erl b/src/mem3/src/mem3_nodes.erl
index b46b3bb64..f39c71b43 100644
--- a/src/mem3/src/mem3_nodes.erl
+++ b/src/mem3/src/mem3_nodes.erl
@@ -49,6 +49,8 @@ get_node_info(Node, Key) ->
end.
init([]) ->
+ DbName = mem3_sync:nodes_db(),
+ ioq:set_io_priority({system, DbName}),
ets:new(?MODULE, [named_table, {read_concurrency, true}]),
UpdateSeq = initialize_nodelist(),
{Pid, _} = spawn_monitor(fun() -> listen_for_changes(UpdateSeq) end),
@@ -104,7 +106,7 @@ code_change(_OldVsn, #state{} = State, _Extra) ->
%% internal functions
initialize_nodelist() ->
- DbName = config:get("mem3", "nodes_db", "_nodes"),
+ DbName = mem3_sync:nodes_db(),
{ok, Db} = mem3_util:ensure_exists(DbName),
{ok, _} = couch_db:fold_docs(Db, fun first_fold/2, Db, []),
insert_if_missing(Db, [node() | mem3_seeds:get_seeds()]),
@@ -122,7 +124,8 @@ first_fold(#full_doc_info{id = Id} = DocInfo, Db) ->
{ok, Db}.
listen_for_changes(Since) ->
- DbName = config:get("mem3", "nodes_db", "_nodes"),
+ DbName = mem3_sync:nodes_db(),
+ ioq:set_io_priority({system, DbName}),
{ok, Db} = mem3_util:ensure_exists(DbName),
Args = #changes_args{
feed = "continuous",
diff --git a/src/mem3/src/mem3_shards.erl b/src/mem3/src/mem3_shards.erl
index 8bbc92411..f48bfdb8a 100644
--- a/src/mem3/src/mem3_shards.erl
+++ b/src/mem3/src/mem3_shards.erl
@@ -220,6 +220,8 @@ init([]) ->
ok = config:listen_for_changes(?MODULE, nil),
SizeList = config:get("mem3", "shard_cache_size", "25000"),
WriteTimeout = config:get_integer("mem3", "shard_write_timeout", 1000),
+ DbName = mem3_sync:shards_db(),
+ ioq:set_io_priority({system, DbName}),
UpdateSeq = get_update_seq(),
{ok, #st{
max_size = list_to_integer(SizeList),
@@ -341,7 +343,9 @@ get_update_seq() ->
Seq.
listen_for_changes(Since) ->
- {ok, Db} = mem3_util:ensure_exists(mem3_sync:shards_db()),
+ DbName = mem3_sync:shards_db(),
+ ioq:set_io_priority({system, DbName}),
+ {ok, Db} = mem3_util:ensure_exists(DbName),
Args = #changes_args{
feed = "continuous",
since = Since,
diff --git a/src/mem3/src/mem3_util.erl b/src/mem3/src/mem3_util.erl
index f454e3eb1..6a4ae1327 100644
--- a/src/mem3/src/mem3_util.erl
+++ b/src/mem3/src/mem3_util.erl
@@ -119,6 +119,7 @@ write_db_doc(Doc) ->
write_db_doc(mem3_sync:shards_db(), Doc, true).
write_db_doc(DbName, #doc{id = Id, body = Body} = Doc, ShouldMutate) ->
+ ioq:maybe_set_io_priority({system, DbName}),
{ok, Db} = couch_db:open(DbName, [?ADMIN_CTX]),
try couch_db:open_doc(Db, Id, [ejson_body]) of
{ok, #doc{body = Body}} ->
@@ -144,6 +145,7 @@ update_db_doc(Doc) ->
update_db_doc(mem3_sync:shards_db(), Doc, true).
update_db_doc(DbName, #doc{id = Id, body = Body} = Doc, ShouldMutate) ->
+ ioq:maybe_set_io_priority({system, DbName}),
{ok, Db} = couch_db:open(DbName, [?ADMIN_CTX]),
try couch_db:open_doc(Db, Id, [ejson_body]) of
{ok, #doc{body = Body}} ->
@@ -174,6 +176,7 @@ delete_db_doc(DocId) ->
delete_db_doc(mem3_sync:shards_db(), DocId, true).
delete_db_doc(DbName, DocId, ShouldMutate) ->
+ ioq:maybe_set_io_priority({system, DbName}),
{ok, Db} = couch_db:open(DbName, [?ADMIN_CTX]),
{ok, Revs} = couch_db:open_doc_revs(Db, DocId, all, []),
try [Doc#doc{deleted = true} || {ok, #doc{deleted = false} = Doc} <- Revs] of