diff options
author | Robert Newson <rnewson@apache.org> | 2021-02-15 09:17:34 +0000 |
---|---|---|
committer | Robert Newson <rnewson@apache.org> | 2021-02-15 18:35:23 +0000 |
commit | 3d573bf515502d84eb50427d86ff72c29ca35e12 (patch) | |
tree | c16d94521bcaac702d103f64a3f42a1ef0d57006 | |
parent | be2898dd5338e2e83c6058f6974cc6177c0bccae (diff) | |
download | couchdb-3d573bf515502d84eb50427d86ff72c29ca35e12.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.erl | 14 |
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, []), |