cli: Add warning message while converting to replica 2 configuration
Currently while creating replica 2 volume we display a warning message of ending up in split-brain. But while converting an existing volume from other configuration to replica 2 by add-brick or remove-brick operations we do not show any such messages. With this fix in add-brick and remove-brick cases also we will display the same warning message and prompt for confirmation if the configuration changes to replica 2. Change-Id: Ifc4ed6994a087d2403894f4e743c4eb41633276b fixes: bz#1627044 Signed-off-by: karthik-us <ksubrahm@redhat.com>
This commit is contained in:
parent
23fa1feaf0
commit
f0bacb2a51
@ -1709,8 +1709,8 @@ out:
|
||||
}
|
||||
|
||||
int32_t
|
||||
cli_cmd_volume_add_brick_parse (const char **words, int wordcount,
|
||||
dict_t **options, int *ret_type)
|
||||
cli_cmd_volume_add_brick_parse (struct cli_state *state, const char **words,
|
||||
int wordcount, dict_t **options, int *ret_type)
|
||||
{
|
||||
dict_t *dict = NULL;
|
||||
char *volname = NULL;
|
||||
@ -1725,6 +1725,8 @@ cli_cmd_volume_add_brick_parse (const char **words, int wordcount,
|
||||
int index;
|
||||
gf_boolean_t is_force = _gf_false;
|
||||
int wc = wordcount;
|
||||
gf_answer_t answer = GF_ANSWER_NO;
|
||||
const char *question = NULL;
|
||||
|
||||
GF_ASSERT (words);
|
||||
GF_ASSERT (options);
|
||||
@ -1789,6 +1791,24 @@ cli_cmd_volume_add_brick_parse (const char **words, int wordcount,
|
||||
goto out;
|
||||
index = 7;
|
||||
}
|
||||
|
||||
if (count == 2) {
|
||||
if (strcmp (words[wordcount - 1], "force")) {
|
||||
question = "Replica 2 volumes are prone to "
|
||||
"split-brain. Use Arbiter or "
|
||||
"Replica 3 to avaoid this. See: "
|
||||
"http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/."
|
||||
"\nDo you still want to continue?\n";
|
||||
answer = cli_cmd_get_confirmation (state,
|
||||
question);
|
||||
if (GF_ANSWER_NO == answer) {
|
||||
gf_log ("cli", GF_LOG_ERROR, "Add brick"
|
||||
" cancelled, exiting");
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if ((strcmp (w, "stripe")) == 0) {
|
||||
type = GF_CLUSTER_TYPE_STRIPE;
|
||||
count = strtol (words[4], NULL, 0);
|
||||
@ -1992,9 +2012,10 @@ out:
|
||||
}
|
||||
|
||||
int32_t
|
||||
cli_cmd_volume_remove_brick_parse (const char **words, int wordcount,
|
||||
dict_t **options, int *question,
|
||||
int *brick_count, int32_t *comm)
|
||||
cli_cmd_volume_remove_brick_parse (struct cli_state *state, const char **words,
|
||||
int wordcount, dict_t **options,
|
||||
int *question, int *brick_count,
|
||||
int32_t *comm)
|
||||
{
|
||||
dict_t *dict = NULL;
|
||||
char *volname = NULL;
|
||||
@ -2012,6 +2033,8 @@ cli_cmd_volume_remove_brick_parse (const char **words, int wordcount,
|
||||
char *w = NULL;
|
||||
int32_t command = GF_OP_CMD_NONE;
|
||||
long count = 0;
|
||||
gf_answer_t answer = GF_ANSWER_NO;
|
||||
const char *ques = NULL;
|
||||
|
||||
GF_ASSERT (words);
|
||||
GF_ASSERT (options);
|
||||
@ -2046,6 +2069,24 @@ cli_cmd_volume_remove_brick_parse (const char **words, int wordcount,
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (count == 2) {
|
||||
if (strcmp (words[wordcount - 1], "force")) {
|
||||
ques = "Replica 2 volumes are prone to "
|
||||
"split-brain. Use Arbiter or Replica 3 "
|
||||
"to avaoid this. See: "
|
||||
"http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/."
|
||||
"\nDo you still want to continue?\n";
|
||||
answer = cli_cmd_get_confirmation (state,
|
||||
ques);
|
||||
if (GF_ANSWER_NO == answer) {
|
||||
gf_log ("cli", GF_LOG_ERROR, "Remove "
|
||||
"brick cancelled, exiting");
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ret = dict_set_int32 (dict, "replica-count", count);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
@ -1023,7 +1023,8 @@ cli_cmd_volume_add_brick_cbk (struct cli_state *state,
|
||||
if (!frame)
|
||||
goto out;
|
||||
|
||||
ret = cli_cmd_volume_add_brick_parse (words, wordcount, &options, 0);
|
||||
ret = cli_cmd_volume_add_brick_parse (state, words, wordcount, &options,
|
||||
0);
|
||||
if (ret) {
|
||||
cli_usage_out (word->pattern);
|
||||
parse_error = 1;
|
||||
@ -1155,7 +1156,8 @@ do_cli_cmd_volume_attach_tier (struct cli_state *state,
|
||||
if (!frame)
|
||||
goto out;
|
||||
|
||||
ret = cli_cmd_volume_add_brick_parse (words, wordcount, &options, &type);
|
||||
ret = cli_cmd_volume_add_brick_parse (state, words, wordcount, &options,
|
||||
&type);
|
||||
if (ret) {
|
||||
cli_usage_out (word->pattern);
|
||||
parse_error = 1;
|
||||
@ -2032,9 +2034,9 @@ cli_cmd_volume_remove_brick_cbk (struct cli_state *state,
|
||||
if (!frame)
|
||||
goto out;
|
||||
|
||||
ret = cli_cmd_volume_remove_brick_parse (words, wordcount, &options,
|
||||
&need_question, &brick_count,
|
||||
&command);
|
||||
ret = cli_cmd_volume_remove_brick_parse (state, words, wordcount,
|
||||
&options, &need_question,
|
||||
&brick_count, &command);
|
||||
if (ret) {
|
||||
cli_usage_out (word->pattern);
|
||||
parse_error = 1;
|
||||
|
@ -261,8 +261,8 @@ cli_cmd_get_state_parse (struct cli_state *state, const char **words,
|
||||
int wordcount, dict_t **options, char **op_errstr);
|
||||
|
||||
int32_t
|
||||
cli_cmd_volume_add_brick_parse (const char **words, int wordcount,
|
||||
dict_t **options, int *type);
|
||||
cli_cmd_volume_add_brick_parse (struct cli_state *state, const char **words,
|
||||
int wordcount, dict_t **options, int *type);
|
||||
|
||||
int32_t
|
||||
cli_cmd_volume_detach_tier_parse (const char **words, int wordcount,
|
||||
@ -277,9 +277,10 @@ cli_cmd_volume_old_tier_parse (const char **words, int wordcount,
|
||||
dict_t **options);
|
||||
|
||||
int32_t
|
||||
cli_cmd_volume_remove_brick_parse (const char **words, int wordcount,
|
||||
dict_t **options, int *question,
|
||||
int *brick_count, int32_t *command);
|
||||
cli_cmd_volume_remove_brick_parse (struct cli_state *state, const char **words,
|
||||
int wordcount, dict_t **options,
|
||||
int *question, int *brick_count,
|
||||
int32_t *command);
|
||||
|
||||
int32_t
|
||||
cli_cmd_volume_replace_brick_parse (const char **words, int wordcount,
|
||||
|
Loading…
x
Reference in New Issue
Block a user