diff options
author | Russell Branca <chewbranca@apache.org> | 2022-07-25 16:27:02 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-25 16:27:02 -0700 |
commit | 74f12c74d393fc1a35fee3fe1fbf5db372525879 (patch) | |
tree | ea27109a07b3f2f5895e37e4c7bc65bcfc9aec7e | |
parent | a45e82aa1a5efed10bfe97fcfdc53ee5d5fc689f (diff) | |
parent | c09cd89680b28f0f901297710894060da4b428ef (diff) | |
download | couchdb-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.src | 3 | ||||
-rw-r--r-- | src/chttpd/src/chttpd_auth_cache.erl | 6 | ||||
-rw-r--r-- | src/couch_index/src/couch_index.app.src | 2 | ||||
-rw-r--r-- | src/couch_index/src/couch_index.erl | 1 | ||||
-rw-r--r-- | src/couch_peruser/src/couch_peruser.app.src | 2 | ||||
-rw-r--r-- | src/couch_peruser/src/couch_peruser.erl | 2 | ||||
-rw-r--r-- | src/couch_replicator/src/couch_replicator.app.src | 3 | ||||
-rw-r--r-- | src/couch_replicator/src/couch_replicator_docs.erl | 2 | ||||
-rw-r--r-- | src/global_changes/src/global_changes.app.src | 3 | ||||
-rw-r--r-- | src/global_changes/src/global_changes_server.erl | 5 | ||||
-rw-r--r-- | src/ioq/src/ioq.erl | 19 | ||||
-rw-r--r-- | src/mem3/src/mem3.app.src | 3 | ||||
-rw-r--r-- | src/mem3/src/mem3_nodes.erl | 7 | ||||
-rw-r--r-- | src/mem3/src/mem3_shards.erl | 6 | ||||
-rw-r--r-- | src/mem3/src/mem3_util.erl | 3 |
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 |