You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by va...@apache.org on 2019/11/19 17:54:21 UTC

[couchdb] branch fdb-node-types created (now b374987)

This is an automated email from the ASF dual-hosted git repository.

vatamane pushed a change to branch fdb-node-types
in repository https://gitbox.apache.org/repos/asf/couchdb.git.


      at b374987  Draft implementation of node types

This branch includes the following new commits:

     new b374987  Draft implementation of node types

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[couchdb] 01/01: Draft implementation of node types

Posted by va...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

vatamane pushed a commit to branch fdb-node-types
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit b374987ef4ac2057e91bf1056423b0052d23c314
Author: Nick Vatamaniuc <va...@apache.org>
AuthorDate: Tue Nov 19 12:52:49 2019 -0500

    Draft implementation of node types
---
 src/chttpd/src/chttpd_sup.erl              | 19 +++++++----
 src/couch_views/src/couch_views_server.erl | 17 +++++----
 src/fabric/src/fabric2_node_types.erl      | 55 ++++++++++++++++++++++++++++++
 3 files changed, 78 insertions(+), 13 deletions(-)

diff --git a/src/chttpd/src/chttpd_sup.erl b/src/chttpd/src/chttpd_sup.erl
index d4bdb11..16e5935 100644
--- a/src/chttpd/src/chttpd_sup.erl
+++ b/src/chttpd/src/chttpd_sup.erl
@@ -29,7 +29,15 @@ start_link(Args) ->
     supervisor:start_link({local,?MODULE}, ?MODULE, Args).
 
 init([]) ->
-    Children = [
+    Children = case fabric2_node_types:is_type("api_frontend") of
+        true -> get_children();
+        false -> []
+    end,
+    {ok, {{one_for_one, 3, 10},
+        couch_epi:register_service(chttpd_epi, Children)}}.
+
+get_children() ->
+    [
         {
             config_listener_mon,
             {config_listener_mon, start_link, [?MODULE, settings()]},
@@ -41,12 +49,9 @@ init([]) ->
         ?CHILD(chttpd, worker),
         ?CHILD(chttpd_auth_cache, worker),
         {chttpd_auth_cache_lru,
-	 {ets_lru, start_link, [chttpd_auth_cache_lru, lru_opts()]},
-	 permanent, 5000, worker, [ets_lru]}
-    ],
-
-    {ok, {{one_for_one, 3, 10},
-        couch_epi:register_service(chttpd_epi, Children)}}.
+            {ets_lru, start_link, [chttpd_auth_cache_lru, lru_opts()]},
+            permanent, 5000, worker, [ets_lru]}
+    ].
 
 handle_config_change("chttpd", "bind_address", Value, _, Settings) ->
     maybe_replace(bind_address, Value, Settings);
diff --git a/src/couch_views/src/couch_views_server.erl b/src/couch_views/src/couch_views_server.erl
index d14216e..24c8355 100644
--- a/src/couch_views/src/couch_views_server.erl
+++ b/src/couch_views/src/couch_views_server.erl
@@ -39,13 +39,18 @@ start_link() ->
 
 
 init(_) ->
-    process_flag(trap_exit, true),
     couch_views_jobs:set_timeout(),
-    St = #{
-        workers => #{},
-        max_workers => max_workers()
-    },
-    {ok, spawn_workers(St)}.
+    case fabric2_node_types:is_type("view_indexing") of
+        true ->
+            process_flag(trap_exit, true),
+            St = #{
+                workers => #{},
+                max_workers => max_workers()
+            },
+            {ok, spawn_workers(St)};
+        false ->
+            ignore
+    end.
 
 
 terminate(_, _St) ->
diff --git a/src/fabric/src/fabric2_node_types.erl b/src/fabric/src/fabric2_node_types.erl
new file mode 100644
index 0000000..7a8cb7e
--- /dev/null
+++ b/src/fabric/src/fabric2_node_types.erl
@@ -0,0 +1,55 @@
+% Licensed under the Apache License, Version 2.0 (the "License"); you may not
+% use this file except in compliance with the License. You may obtain a copy of
+% the License at
+%
+%   http://www.apache.org/licenses/LICENSE-2.0
+%
+% Unless required by applicable law or agreed to in writing, software
+% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+% License for the specific language governing permissions and limitations under
+% the License.
+
+-module(fabric2_node_types).
+
+
+-export([
+    is_type/1
+]).
+
+
+is_type(Type) when is_list(Type) ->
+    case {from_env(Type), from_config(Type)} of
+        {V, _} when is_boolean(V) ->
+            V;
+        {undefined, V} when is_boolean(V) ->
+            V;
+        {undefined, undefined} ->
+            % When not defined anywhere assume `true`, that is by default a
+            % node will perform all the background tasks
+            true
+    end.
+
+
+from_env(Type) when is_list(Type) ->
+    VarStr = string:to_upper(Type),
+    case os:getenv("COUCHDB_NODE_TYPE_" ++ VarStr) of
+        false ->
+            undefined;
+        Str when is_list(Str) ->
+            case string:to_lower(Str) of
+                "false" -> false;
+                _ -> true
+            end
+    end.
+
+
+from_config(Type) when is_list(Type) ->
+    case config:get("node_type", Type) of
+        undefined ->
+            undefined;
+        "false" ->
+            false;
+        V when is_list(V) ->
+            true
+    end.