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