diff options
Diffstat (limited to 'xlators')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-snapshot.c | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-snapshot.c b/xlators/mgmt/glusterd/src/glusterd-snapshot.c index 374397e7c4..c88444098c 100644 --- a/xlators/mgmt/glusterd/src/glusterd-snapshot.c +++ b/xlators/mgmt/glusterd/src/glusterd-snapshot.c @@ -918,6 +918,7 @@ glusterd_snapshot_create_prevalidate (dict_t *dict, char **op_errstr, gf_loglevel_t loglevel = GF_LOG_ERROR; glusterd_conf_t *conf = NULL; int64_t effective_max_limit = 0; + int flags = 0; this = THIS; GF_ASSERT (op_errstr); @@ -943,6 +944,12 @@ glusterd_snapshot_create_prevalidate (dict_t *dict, char **op_errstr, goto out; } + ret = dict_get_int32 (dict, "flags", &flags); + if (ret) { + gf_log (this->name, GF_LOG_ERROR, "Unable to get flags"); + goto out; + } + if (glusterd_find_snap_by_name (snapname)) { ret = -1; snprintf (err_str, sizeof (err_str), "Snap %s already exists", @@ -1026,13 +1033,26 @@ glusterd_snapshot_create_prevalidate (dict_t *dict, char **op_errstr, } if (!glusterd_is_brick_started (brickinfo)) { - gf_log (this->name, GF_LOG_WARNING, - "brick %s:%s is not started", - brickinfo->hostname, - brickinfo->path); - brick_order++; - brick_count++; - continue; + if(flags & GF_CLI_FLAG_OP_FORCE) { + gf_log (this->name, GF_LOG_WARNING, + "brick %s:%s is not started", + brickinfo->hostname, + brickinfo->path); + brick_order++; + brick_count++; + continue; + } + + snprintf (err_str, sizeof (err_str), + "brick %s:%s is not started. " + "Please start the stopped brick " + "and then issue snapshot create " + "command or use [force] option in " + "snapshot create to override this " + "behavior.", brickinfo->hostname, + brickinfo->path); + ret = -1; + goto out; } device = glusterd_get_brick_mount_details (brickinfo); |