summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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"