diff options
author | Joseph Fernandes <josferna@redhat.com> | 2014-04-21 20:28:22 +0530 |
---|---|---|
committer | Vijay Bellur <vbellur@redhat.com> | 2014-04-30 23:27:23 -0700 |
commit | f63fbca7540a4c9ce090e1ed5941ed8777ff6316 (patch) | |
tree | f342c9aa37cbbc45ebfa66f77daff25696eac569 /xlators/mgmt/glusterd/src/glusterd-snapshot.c | |
parent | 57fddef768d0e0feee07e5d745dcb4656fe5cb84 (diff) |
[glusterd/snapshot] snapshot create force option
Implement force option in snapshot create i.e
1) Creation of snapshot fails if the original volume
bricks are down
2) With a force option creation of snapshot will continue
even if the original volume bricks are down.
This was the fix for bugs 1089527 and 1083502
Change-Id: I8de0242adf8ee0af00db9fa8701d86fabc12e7fc
BUG: 1090042
Signed-off-by: Joseph Fernandes <josferna@redhat.com>
Reviewed-on: http://review.gluster.org/7520
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
Reviewed-by: Krishnan Parthasarathi <kparthas@redhat.com>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-snapshot.c')
-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 374397e7c4c..c88444098c7 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); |