summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Newson <rnewson@apache.org>2021-02-15 09:17:34 +0000
committerRobert Newson <rnewson@apache.org>2021-02-15 18:35:23 +0000
commit3d573bf515502d84eb50427d86ff72c29ca35e12 (patch)
treec16d94521bcaac702d103f64a3f42a1ef0d57006
parentbe2898dd5338e2e83c6058f6974cc6177c0bccae (diff)
downloadcouchdb-couch_server_config_change.tar.gz
Preserve max_dbs_open division during config changecouch_server_config_change
And prevent max_dbs_open going below 1.
-rw-r--r--src/couch/src/couch_server.erl14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/couch/src/couch_server.erl b/src/couch/src/couch_server.erl
index 480ed58ed..59b630ee7 100644
--- a/src/couch/src/couch_server.erl
+++ b/src/couch/src/couch_server.erl
@@ -293,7 +293,7 @@ init([N]) ->
process_flag(trap_exit, true),
{ok, #server{root_dir=RootDir,
engines = Engines,
- max_dbs_open=MaxDbsOpen div couch_server:num_servers(),
+ max_dbs_open=per_couch_server(MaxDbsOpen),
update_lru_on_read=UpdateLruOnRead,
start_time=couch_util:rfc1123_date(),
couch_dbs=couch_dbs(N),
@@ -322,11 +322,13 @@ handle_config_change("couchdb", "update_lru_on_read", "true", _, N) ->
handle_config_change("couchdb", "update_lru_on_read", _, _, N) ->
gen_server:call(couch_server(N),{set_update_lru_on_read,false}),
{ok, N};
-handle_config_change("couchdb", "max_dbs_open", Max, _, N) when is_list(Max) ->
- gen_server:call(couch_server(N),{set_max_dbs_open,list_to_integer(Max)}),
+handle_config_change("couchdb", "max_dbs_open", Max0, _, N) when is_list(Max0) ->
+ Max1 = per_couch_server(list_to_integer(Max0)),
+ gen_server:call(couch_server(N),{set_max_dbs_open,Max1}),
{ok, N};
handle_config_change("couchdb", "max_dbs_open", _, _, N) ->
- gen_server:call(couch_server(N),{set_max_dbs_open,?MAX_DBS_OPEN}),
+ Max = per_couch_server(?MAX_DBS_OPEN),
+ gen_server:call(couch_server(N),{set_max_dbs_open,Max}),
{ok, N};
handle_config_change("couchdb_engines", _, _, _, N) ->
gen_server:call(couch_server(N), reload_engines),
@@ -356,6 +358,10 @@ handle_config_terminate(_Server, _Reason, N) ->
erlang:send_after(?RELISTEN_DELAY, whereis(?MODULE), {restart_config_listener, N}).
+per_couch_server(X) ->
+ erlang:max(1, X div couch_server:num_servers()).
+
+
all_databases() ->
{ok, DbList} = all_databases(
fun(DbName, Acc) -> {ok, [DbName | Acc]} end, []),