diff options
Diffstat (limited to 'cli/src')
| -rw-r--r-- | cli/src/cli-cmd-parser.c | 40 | ||||
| -rw-r--r-- | cli/src/cli-cmd-volume.c | 37 | 
2 files changed, 70 insertions, 7 deletions
diff --git a/cli/src/cli-cmd-parser.c b/cli/src/cli-cmd-parser.c index 8725b79f6..0533b96c3 100644 --- a/cli/src/cli-cmd-parser.c +++ b/cli/src/cli-cmd-parser.c @@ -174,6 +174,8 @@ cli_cmd_volume_create_parse (const char **words, int wordcount, dict_t **options  #ifdef HAVE_BD_XLATOR          char     *dev_type = NULL;  #endif +        gf_boolean_t is_force = _gf_false; +        int wc = wordcount;          GF_ASSERT (words);          GF_ASSERT (options); @@ -350,7 +352,12 @@ cli_cmd_volume_create_parse (const char **words, int wordcount, dict_t **options          brick_index = index; -        ret = cli_cmd_bricks_parse (words, wordcount, brick_index, &bricks, +        if (strcmp (words[wordcount - 1], "force") == 0) { +                is_force = _gf_true; +                wc = wordcount - 1; +        } + +        ret = cli_cmd_bricks_parse (words, wc, brick_index, &bricks,                                      &brick_count);          if (ret)                  goto out; @@ -421,6 +428,10 @@ cli_cmd_volume_create_parse (const char **words, int wordcount, dict_t **options          if (ret)                  goto out; +        ret = dict_set_int32 (dict, "force", is_force); +        if (ret) +                goto out; +          *options = dict;  out: @@ -909,6 +920,8 @@ cli_cmd_volume_add_brick_parse (const char **words, int wordcount,          int     count = 1;          char    *w = NULL;          int     index; +        gf_boolean_t is_force = _gf_false; +        int wc = wordcount;          GF_ASSERT (words);          GF_ASSERT (options); @@ -986,7 +999,13 @@ cli_cmd_volume_add_brick_parse (const char **words, int wordcount,          brick_index = index;  parse_bricks: -        ret = cli_cmd_bricks_parse (words, wordcount, brick_index, &bricks, + +        if (strcmp (words[wordcount - 1], "force") == 0) { +                is_force = _gf_true; +                wc = wordcount - 1; +        } + +        ret = cli_cmd_bricks_parse (words, wc, brick_index, &bricks,                                      &brick_count);          if (ret)                  goto out; @@ -1000,6 +1019,10 @@ parse_bricks:          if (ret)                  goto out; +        ret = dict_set_int32 (dict, "force", is_force); +        if (ret) +                goto out; +          *options = dict;  out: @@ -1202,6 +1225,7 @@ cli_cmd_volume_replace_brick_parse (const char **words, int wordcount,          char    *opwords[] = { "start", "commit", "pause", "abort", "status",                                  NULL };          char    *w = NULL; +        gf_boolean_t is_force = _gf_false;          GF_ASSERT (words);          GF_ASSERT (options); @@ -1299,12 +1323,17 @@ cli_cmd_volume_replace_brick_parse (const char **words, int wordcount,          }          if (wordcount == (op_index + 1)) { -                if (replace_op != GF_REPLACE_OP_COMMIT) { +                if ((replace_op != GF_REPLACE_OP_COMMIT) && +                    (replace_op != GF_REPLACE_OP_START)) {                          ret = -1;                          goto out;                  }                  if (!strcmp ("force", words[op_index])) { -                        replace_op = GF_REPLACE_OP_COMMIT_FORCE; +                        if (replace_op == GF_REPLACE_OP_COMMIT) +                                replace_op = GF_REPLACE_OP_COMMIT_FORCE; + +                        else if (replace_op == GF_REPLACE_OP_START) +                                is_force = _gf_true;                  }          } @@ -1318,6 +1347,9 @@ cli_cmd_volume_replace_brick_parse (const char **words, int wordcount,          if (ret)                  goto out; +        ret = dict_set_int32 (dict, "force", is_force); +        if (ret) +                goto out;          *options = dict; diff --git a/cli/src/cli-cmd-volume.c b/cli/src/cli-cmd-volume.c index 4dcb99ce2..216a2b6bf 100644 --- a/cli/src/cli-cmd-volume.c +++ b/cli/src/cli-cmd-volume.c @@ -392,6 +392,15 @@ cli_cmd_volume_create_cbk (struct cli_state *state, struct cli_cmd_word *word,                  }          } +        if (state->mode & GLUSTER_MODE_SCRIPT) { +                ret = dict_set_int32 (options, "force", _gf_true); +                if (ret) { +                        gf_log ("cli", GF_LOG_ERROR, "Failed to set force " +                                "option"); +                        goto out; +                } +        } +          CLI_LOCAL_INIT (local, words, frame, options);          if (proc->fn) { @@ -963,6 +972,15 @@ cli_cmd_volume_add_brick_cbk (struct cli_state *state,                  }          } +        if (state->mode & GLUSTER_MODE_SCRIPT) { +                ret = dict_set_int32 (options, "force", _gf_true); +                if (ret) { +                        gf_log ("cli", GF_LOG_ERROR, "Failed to set force " +                                "option"); +                        goto out; +                } +        } +          proc = &cli_rpc_prog->proctable[GLUSTER_CLI_ADD_BRICK];          CLI_LOCAL_INIT (local, words, frame, options); @@ -1131,6 +1149,15 @@ cli_cmd_volume_replace_brick_cbk (struct cli_state *state,                  goto out;          } +        if (state->mode & GLUSTER_MODE_SCRIPT) { +                ret = dict_set_int32 (options, "force", _gf_true); +                if (ret) { +                        gf_log ("cli", GF_LOG_ERROR, "Failed to set force" +                                "option"); +                        goto out; +                } +        } +          CLI_LOCAL_INIT (local, words, frame, options);          if (proc->fn) { @@ -1795,7 +1822,11 @@ struct cli_cmd volume_cmds[] = {            cli_cmd_volume_info_cbk,            "list information of all volumes"}, -        { "volume create <NEW-VOLNAME> [stripe <COUNT>] [replica <COUNT>] [device vg] [transport <tcp|rdma|tcp,rdma>] <NEW-BRICK> ...", +        { "volume create <NEW-VOLNAME> [stripe <COUNT>] [replica <COUNT>] " +#ifdef HAVE_BD_XLATOR +        "[device vg] " +#endif +        "[transport <tcp|rdma|tcp,rdma>] <NEW-BRICK> ... [force]",            cli_cmd_volume_create_cbk,            "create a new volume of specified type with mentioned bricks"}, @@ -1815,7 +1846,7 @@ struct cli_cmd volume_cmds[] = {            cli_cmd_volume_rename_cbk,            "rename volume <VOLNAME> to <NEW-VOLNAME>"},*/ -        { "volume add-brick <VOLNAME> [<stripe|replica> <COUNT>] <NEW-BRICK> ...", +        { "volume add-brick <VOLNAME> [<stripe|replica> <COUNT>] <NEW-BRICK> ... [force]",            cli_cmd_volume_add_brick_cbk,            "add brick to volume <VOLNAME>"}, @@ -1827,7 +1858,7 @@ struct cli_cmd volume_cmds[] = {            cli_cmd_volume_defrag_cbk,            "rebalance operations"}, -        { "volume replace-brick <VOLNAME> <BRICK> <NEW-BRICK> {start|pause|abort|status|commit [force]}", +        { "volume replace-brick <VOLNAME> <BRICK> <NEW-BRICK> {start [force]|pause|abort|status|commit [force]}",            cli_cmd_volume_replace_brick_cbk,            "replace-brick operations"},  | 
