summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSusant Palai <spalai@redhat.com>2018-02-26 11:33:06 +0530
committerAtin Mukherjee <amukherj@redhat.com>2018-05-03 17:57:33 +0000
commitc63b278947dbc134e08331a097cf2041cf98c545 (patch)
treea21b05bdc4ed7c27abfeaa61b25d949e0acf07bd
parentf46047ea0f36084f4456887673552a01b926382d (diff)
cli/glusterd: Add warning message in cli for user to check
force-migration config for remove-brick operation. The cli will take input from the user before starting "remove-brick" start operation. The message/confirmation looks like the following: <Running remove-brick with cluster.force-migration enabled can result in data corruption. It is safer to disable this option so that files that receive writes during migration are not migrated. Files that are not migrated can then be manually copied after the remove-brick commit operation. Do you want to continue with your current cluster.force-migration settings? (y/n)> And also question for COMMIT_FORCE is changed. Fixes: bz#1572586 Change-Id: Ifdb6b108a646f50339dd196d6e65962864635139 Signed-off-by: Susant Palai <spalai@redhat.com>
-rw-r--r--cli/src/cli-cmd-parser.c8
-rw-r--r--cli/src/cli-cmd-volume.c24
-rw-r--r--cli/src/cli.h2
-rw-r--r--tests/bugs/cli/bug-961307.t2
4 files changed, 27 insertions, 9 deletions
diff --git a/cli/src/cli-cmd-parser.c b/cli/src/cli-cmd-parser.c
index 950067550be..29043e09810 100644
--- a/cli/src/cli-cmd-parser.c
+++ b/cli/src/cli-cmd-parser.c
@@ -1991,7 +1991,7 @@ out:
int32_t
cli_cmd_volume_remove_brick_parse (const char **words, int wordcount,
dict_t **options, int *question,
- int *brick_count)
+ int *brick_count, int32_t *comm)
{
dict_t *dict = NULL;
char *volname = NULL;
@@ -2060,10 +2060,10 @@ cli_cmd_volume_remove_brick_parse (const char **words, int wordcount,
wordcount--;
if (!strcmp ("start", w)) {
command = GF_OP_CMD_START;
- } else if (!strcmp ("commit", w)) {
- command = GF_OP_CMD_COMMIT;
if (question)
*question = 1;
+ } else if (!strcmp ("commit", w)) {
+ command = GF_OP_CMD_COMMIT;
} else if (!strcmp ("stop", w)) {
command = GF_OP_CMD_STOP;
} else if (!strcmp ("status", w)) {
@@ -2156,6 +2156,8 @@ out:
GF_FREE (tmp_brick);
GF_FREE (tmp_brick1);
+ *comm = command;
+
return ret;
}
diff --git a/cli/src/cli-cmd-volume.c b/cli/src/cli-cmd-volume.c
index 6dade9256e4..ee7e8f94c9e 100644
--- a/cli/src/cli-cmd-volume.c
+++ b/cli/src/cli-cmd-volume.c
@@ -2023,20 +2023,37 @@ cli_cmd_volume_remove_brick_cbk (struct cli_state *state,
char *event_str = NULL;
int event_ret = -1;
#endif
- const char *question = "Removing brick(s) can result in data loss. "
- "Do you want to Continue?";
+ int32_t command = GF_OP_CMD_NONE;
+ char *question = NULL;
frame = create_frame (THIS, THIS->ctx->pool);
if (!frame)
goto out;
ret = cli_cmd_volume_remove_brick_parse (words, wordcount, &options,
- &need_question, &brick_count);
+ &need_question, &brick_count,
+ &command);
if (ret) {
cli_usage_out (word->pattern);
parse_error = 1;
goto out;
}
+
+ if (command == GF_OP_CMD_COMMIT_FORCE) {
+ question = "Remove-brick force will not migrate files from the "
+ "removed bricks, so they will no longer be available"
+ " on the volume.\nDo you want to continue?";
+ } else if (command == GF_OP_CMD_START) {
+ question = "Running remove-brick with cluster.force-migration"
+ " enabled can result in data corruption. It is safer"
+ " to disable this option so that files that receive "
+ "writes during migration are not migrated.\nFiles "
+ "that are not migrated can then be manually copied "
+ "after the remove-brick commit operation.\nDo you "
+ "want to continue with your current "
+ "cluster.force-migration settings?";
+ }
+
if (!brick_count) {
cli_err ("No bricks specified");
cli_usage_out (word->pattern);
@@ -2065,7 +2082,6 @@ cli_cmd_volume_remove_brick_cbk (struct cli_state *state,
}
if (!(state->mode & GLUSTER_MODE_SCRIPT) && need_question) {
- /* we need to ask question only in case of 'commit or force' */
answer = cli_cmd_get_confirmation (state, question);
if (GF_ANSWER_NO == answer) {
ret = 0;
diff --git a/cli/src/cli.h b/cli/src/cli.h
index 68dcb8c531f..3421d6911fb 100644
--- a/cli/src/cli.h
+++ b/cli/src/cli.h
@@ -279,7 +279,7 @@ cli_cmd_volume_old_tier_parse (const char **words, int wordcount,
int32_t
cli_cmd_volume_remove_brick_parse (const char **words, int wordcount,
dict_t **options, int *question,
- int *brick_count);
+ int *brick_count, int32_t *command);
int32_t
cli_cmd_volume_replace_brick_parse (const char **words, int wordcount,
diff --git a/tests/bugs/cli/bug-961307.t b/tests/bugs/cli/bug-961307.t
index 68fc7bb6a15..602a6e34bce 100644
--- a/tests/bugs/cli/bug-961307.t
+++ b/tests/bugs/cli/bug-961307.t
@@ -13,7 +13,7 @@ TEST pidof glusterd
TEST $CLI volume create $V0 replica $REPLICA $H0:$B0/${V0}-00 $H0:$B0/${V0}-01 $H0:$B0/${V0}-10 $H0:$B0/${V0}-11
TEST $CLI volume start $V0
-var1=$(gluster volume remove-brick $H0:$B0/${V0}-00 $H0:$B0/${V0}-01 start 2>&1)
+var1=$($CLI volume remove-brick $H0:$B0/${V0}-00 $H0:$B0/${V0}-01 start 2>&1)
var2="volume remove-brick start: failed: Volume $H0:$B0/${V0}-00 does not exist"
EXPECT "$var2" echo "$var1"