Repository: couchdb-setup
Updated Branches:
  refs/heads/593-setup-single-node [created] 92dd9d10b


Add support for new ensure_dbs_exist option to GET, POST/finish_cluster

Addresses apache/couchdb:593


Project: http://git-wip-us.apache.org/repos/asf/couchdb-setup/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-setup/commit/18314a6d
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-setup/tree/18314a6d
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-setup/diff/18314a6d

Branch: refs/heads/593-setup-single-node
Commit: 18314a6daa56a13f4b4e6f71ce61224a8940f925
Parents: c38d7aa
Author: Joan Touzet <[email protected]>
Authored: Mon Jul 10 13:52:45 2017 -0700
Committer: Joan Touzet <[email protected]>
Committed: Mon Jul 10 13:52:45 2017 -0700

----------------------------------------------------------------------
 .gitignore          |  2 ++
 src/setup.erl       | 24 ++++++++++++++----------
 src/setup_httpd.erl |  9 +++++++--
 3 files changed, 23 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-setup/blob/18314a6d/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index 1dbfa4b..f84f14c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,4 @@
 ebin
 .rebar
+*~
+*.swp

http://git-wip-us.apache.org/repos/asf/couchdb-setup/blob/18314a6d/src/setup.erl
----------------------------------------------------------------------
diff --git a/src/setup.erl b/src/setup.erl
index 5a71004..dd7410a 100644
--- a/src/setup.erl
+++ b/src/setup.erl
@@ -12,8 +12,8 @@
 
 -module(setup).
 
--export([enable_cluster/1, finish_cluster/0, add_node/1, receive_cookie/1]).
--export([is_cluster_enabled/0, has_cluster_system_dbs/0]).
+-export([enable_cluster/1, finish_cluster/1, add_node/1, receive_cookie/1]).
+-export([is_cluster_enabled/0, has_cluster_system_dbs/1, 
cluster_system_dbs/0]).
 
 -include_lib("../couch/include/couch_db.hrl").
 
@@ -54,9 +54,6 @@ cluster_system_dbs() ->
     ["_users", "_replicator", "_global_changes"].
 
 
-has_cluster_system_dbs() ->
-    has_cluster_system_dbs(cluster_system_dbs()).
-
 has_cluster_system_dbs([]) ->
     ok;
 has_cluster_system_dbs([Db|Dbs]) ->
@@ -172,12 +169,19 @@ set_admin(Username, Password) ->
   config:set("admins", binary_to_list(Username), binary_to_list(Password)).
 
 
-finish_cluster() ->
-    finish_cluster_int(has_cluster_system_dbs()).
-finish_cluster_int(ok) ->
+finish_cluster(Options) ->
+    Dbs = proplists:get_value(ensure_dbs_exist, Options),
+    case Dbs of
+        undefined ->
+            finish_cluster_int(cluster_system_dbs(), 
has_cluster_system_dbs(cluster_system_dbs()));
+        Dbs ->
+            finish_cluster_int(Dbs, has_cluster_system_dbs(Dbs))
+    end.
+
+finish_cluster_int(_Dbs, ok) ->
     {error, cluster_finished};
-finish_cluster_int(no) ->
-    lists:foreach(fun fabric:create_db/1, cluster_system_dbs()).
+finish_cluster_int(Dbs, no) ->
+    lists:foreach(fun fabric:create_db/1, Dbs).
 
 
 add_node(Options) ->

http://git-wip-us.apache.org/repos/asf/couchdb-setup/blob/18314a6d/src/setup_httpd.erl
----------------------------------------------------------------------
diff --git a/src/setup_httpd.erl b/src/setup_httpd.erl
index a23a3e2..59ed5c7 100644
--- a/src/setup_httpd.erl
+++ b/src/setup_httpd.erl
@@ -29,11 +29,12 @@ handle_setup_req(#httpd{method='POST'}=Req) ->
     end;
 handle_setup_req(#httpd{method='GET'}=Req) ->
     ok = chttpd:verify_is_server_admin(Req),
+    Dbs = chttpd:qs_json_value(Req, "ensure_dbs_exist", 
setup:cluster_system_dbs()),
     case setup:is_cluster_enabled() of
         no ->
             chttpd:send_json(Req, 200, {[{state, cluster_disabled}]});
         ok ->
-            case setup:has_cluster_system_dbs() of
+            case setup:has_cluster_system_dbs(Dbs) of
                 no ->
                     chttpd:send_json(Req, 200, {[{state, cluster_enabled}]});
                 ok ->
@@ -74,7 +75,11 @@ handle_action("enable_cluster", Setup) ->
 
 handle_action("finish_cluster", Setup) ->
     couch_log:notice("finish_cluster: ~p~n", [Setup]),
-    case setup:finish_cluster() of
+
+    Options = get_options([
+        {ensure_dbs_exist, <<"ensure_dbs_exist">>}
+    ], Setup),
+    case setup:finish_cluster(Options) of
         {error, cluster_finished} ->
             {error, <<"Cluster is already finished">>};
         Else ->

Reply via email to