You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by rn...@apache.org on 2021/02/10 18:02:51 UTC
[couchdb] 02/04: supervise multiple couch_servers
This is an automated email from the ASF dual-hosted git repository.
rnewson pushed a commit to branch couch_server_sharding
in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit bc7da56a33cb6f3e7f56e44cc251b22f4074af23
Author: Robert Newson <rn...@apache.org>
AuthorDate: Tue Feb 9 15:42:50 2021 +0000
supervise multiple couch_servers
---
src/couch/src/couch_primary_sup.erl | 35 +++++++++++++++++++++++++++--------
src/couch/src/couch_server.erl | 6 +++---
2 files changed, 30 insertions(+), 11 deletions(-)
diff --git a/src/couch/src/couch_primary_sup.erl b/src/couch/src/couch_primary_sup.erl
index dc2d9e5..363e850 100644
--- a/src/couch/src/couch_primary_sup.erl
+++ b/src/couch/src/couch_primary_sup.erl
@@ -30,13 +30,32 @@ init([]) ->
permanent,
brutal_kill,
worker,
- [couch_task_status]},
- {couch_server,
- {couch_server, sup_start_link, []},
- permanent,
- brutal_kill,
- worker,
- [couch_server]}
- ],
+ [couch_task_status]}
+ ] ++ couch_servers(),
{ok, {{one_for_one, 10, 3600}, Children}}.
+
+couch_servers() ->
+ case application:get_env(couch, concurrency, 10) of
+ undefined ->
+ [couch_server(undefined)];
+ N when is_integer(N), N > 1 ->
+ [couch_server(I) || I <- lists:seq(1, N)]
+ end.
+
+
+couch_server(Num) ->
+ Name = couch_server_name(Num),
+ {Name,
+ {couch_server, sup_start_link, [Name]},
+ permanent,
+ brutal_kill,
+ worker,
+ [couch_server]}.
+
+
+couch_server_name(undefined) ->
+ couch_server;
+
+couch_server_name(N) when is_integer(N), N > 0 ->
+ list_to_atom("couch_server_" ++ integer_to_list(N)).
diff --git a/src/couch/src/couch_server.erl b/src/couch/src/couch_server.erl
index f57bf3b..88052b1 100644
--- a/src/couch/src/couch_server.erl
+++ b/src/couch/src/couch_server.erl
@@ -17,7 +17,7 @@
-export([open/2,create/2,delete/2,get_version/0,get_version/1,get_git_sha/0,get_uuid/0]).
-export([all_databases/0, all_databases/2]).
--export([init/1, handle_call/3,sup_start_link/0]).
+-export([init/1, handle_call/3,sup_start_link/1]).
-export([handle_cast/2,code_change/3,handle_info/2,terminate/2]).
-export([dev_start/0,is_admin/2,has_admins/0,get_stats/0]).
-export([close_lru/0]).
@@ -76,8 +76,8 @@ get_stats() ->
gen_server:call(couch_server, get_server),
[{start_time, ?l2b(Time)}, {dbs_open, Open}].
-sup_start_link() ->
- gen_server:start_link({local, couch_server}, couch_server, [], []).
+sup_start_link(Name) ->
+ gen_server:start_link({local, Name}, couch_server, [], []).
open(DbName, Options) ->
try