Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
Browse files
require nodecount on setup
when setting up a node, require the nodecount from the user. when
setting up a cluster, they will probably know it, if not the ui
other interfaces can count it easily for them. this will remove
the warning for a non matching nodecount for the user, and it
is easy to implement in uis and cli clients (e.g. a wizard for
fauxton or cli client like nmo).

once clusterwide setup lands this gets obviously superfluous.

COUCHDB-2598

This closes COUCHDB-2594
  • Loading branch information
robertkowalski committed Jul 24, 2015
1 parent ff19be1 commit 75a7682e3db9ac021053af025fce5eb1cd78cb55
Showing 4 changed files with 23 additions and 7 deletions.
@@ -24,6 +24,11 @@ require_admins(undefined, {undefined, undefined}) ->
require_admins(_,_) ->
ok.

require_clustersize(undefined) ->
throw({error, "Cluster setup requires node_count to be configured"});
require_clustersize(_) ->
ok.

error_bind_address() ->
throw({error, "Cluster setup requires bind_addres != 127.0.0.1"}).

@@ -83,7 +88,8 @@ enable_cluster_http(Options) ->
{<<"username">>, couch_util:get_value(username, Options)},
{<<"password">>, couch_util:get_value(password, Options)},
{<<"bind_address">>, couch_util:get_value(bind_address, Options)},
{<<"port">>, couch_util:get_value(port, Options)}
{<<"port">>, couch_util:get_value(port, Options)},
{<<"node_count">>, couch_util:get_value(node_count, Options)}
]}),

Headers = [
@@ -134,6 +140,10 @@ enable_cluster_int(Options, no) ->
config:set("httpd", "bind_address", binary_to_list(NewBindAddress))
end,

NodeCount = couch_util:get_value(node_count, Options),
ok = require_clustersize(NodeCount),
config:set("cluster", "n", integer_to_list(NodeCount)),

Port = proplists:get_value(port, Options),
case Port of
undefined ->
@@ -142,7 +152,6 @@ enable_cluster_int(Options, no) ->
config:set("httpd", "port", integer_to_list(Port))
end,
couch_log:notice("Enable Cluster: ~p~n", [Options]).
%cluster_state:set(enabled).

maybe_set_admin(Username, Password) ->
case couch_auth_cache:get_admin(Username) of
@@ -58,7 +58,8 @@ handle_action("enable_cluster", Setup) ->
{port, <<"port">>},
{remote_node, <<"remote_node">>},
{remote_current_user, <<"remote_current_user">>},
{remote_current_password, <<"remote_current_password">>}
{remote_current_password, <<"remote_current_password">>},
{node_count, <<"node_count">>}
], Setup),
case setup:enable_cluster(Options) of
{error, cluster_enabled} ->
@@ -16,10 +16,10 @@ HEADERS="-HContent-Type:application/json"
curl a:b@127.0.0.1:15986/_nodes/_all_docs

# Enable Cluster on node A
curl a:b@127.0.0.1:15984/_cluster_setup -d '{"action":"enable_cluster","username":"foo","password":"baz","bind_address":"0.0.0.0"}' $HEADERS
curl a:b@127.0.0.1:15984/_cluster_setup -d '{"action":"enable_cluster","username":"foo","password":"baz","bind_address":"0.0.0.0","node_count":2}' $HEADERS

# Enable Cluster on node B
curl a:b@127.0.0.1:15984/_cluster_setup -d '{"action":"enable_cluster","remote_node":"127.0.0.1","port":"25984","remote_current_user":"a","remote_current_password":"b","username":"foo","password":"baz","bind_address":"0.0.0.0"}' $HEADERS
curl a:b@127.0.0.1:15984/_cluster_setup -d '{"action":"enable_cluster","remote_node":"127.0.0.1","port":"25984","remote_current_user":"a","remote_current_password":"b","username":"foo","password":"baz","bind_address":"0.0.0.0","node_count":2}' $HEADERS

# Add node B on node A
curl a:b@127.0.0.1:15984/_cluster_setup -d '{"action":"add_node","username":"foo","password":"baz","host":"127.0.0.1","port":25984}' $HEADERS
@@ -57,4 +57,7 @@ curl a:b@127.0.0.1:25984/_replicator
curl a:b@127.0.0.1:25984/_metadata
curl a:b@127.0.0.1:25984/_global_changes

# Number of nodes is set to 2
curl a:b@127.0.0.1:25984/_node/node2@127.0.0.1/_config/cluster/n

echo "YAY ALL GOOD"
@@ -16,10 +16,10 @@ HEADERS="-HContent-Type:application/json"
curl a:b@127.0.0.1:15986/_nodes/_all_docs

# Enable Cluster on node A
curl a:b@127.0.0.1:15984/_cluster_setup -d '{"action":"enable_cluster","username":"foo","password":"baz","bind_address":"0.0.0.0"}' $HEADERS
curl a:b@127.0.0.1:15984/_cluster_setup -d '{"action":"enable_cluster","username":"foo","password":"baz","bind_address":"0.0.0.0","node_count":2}' $HEADERS

# Enable Cluster on node B
curl a:b@127.0.0.1:25984/_cluster_setup -d '{"action":"enable_cluster","username":"foo","password":"baz","bind_address":"0.0.0.0"}' $HEADERS
curl a:b@127.0.0.1:25984/_cluster_setup -d '{"action":"enable_cluster","username":"foo","password":"baz","bind_address":"0.0.0.0","node_count":2}' $HEADERS

# Add node B on node A
curl a:b@127.0.0.1:15984/_cluster_setup -d '{"action":"add_node","username":"foo","password":"baz","host":"127.0.0.1","port":25984}' $HEADERS
@@ -57,4 +57,7 @@ curl a:b@127.0.0.1:25984/_replicator
curl a:b@127.0.0.1:25984/_metadata
curl a:b@127.0.0.1:25984/_global_changes

# Number of nodes is set to 2
curl a:b@127.0.0.1:25984/_node/node2@127.0.0.1/_config/cluster/n

echo "YAY ALL GOOD"

0 comments on commit 75a7682

Please sign in to comment.