diff options
author | Raghavendra Bhat <raghavendra@redhat.com> | 2014-04-15 17:48:16 +0530 |
---|---|---|
committer | Vijay Bellur <vbellur@redhat.com> | 2014-05-03 08:08:47 -0700 |
commit | c6f4504c12d35359986a08da222193057946570a (patch) | |
tree | cd1ed1d1aeda18f59afd5f330a398dc33badb4a4 /xlators/mgmt/glusterd/src/glusterd-snapshot.c | |
parent | 03c9c5db7259ea83161b2bd841f93c9f0688106e (diff) |
mgmt/glusterd: handle postvalidate carefully when prevalidate fails
* Also changed the order of peers retrieval and snapshot retrieval
upon glusterd start, so that the snapshot bricks can be properly
resolved while cleaning up the snapshots.
Change-Id: I120704e4412a9cadb8d90a9b7969f2b4a1196bc5
BUG: 1061685
Signed-off-by: Raghavendra Bhat <raghavendra@redhat.com>
Reviewed-on: http://review.gluster.org/7494
Reviewed-by: Kaushal M <kaushal@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 | 65 |
1 files changed, 43 insertions, 22 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-snapshot.c b/xlators/mgmt/glusterd/src/glusterd-snapshot.c index 399401d187a..395bda1dc00 100644 --- a/xlators/mgmt/glusterd/src/glusterd-snapshot.c +++ b/xlators/mgmt/glusterd/src/glusterd-snapshot.c @@ -4589,14 +4589,6 @@ glusterd_snapshot_create_commit (dict_t *dict, char **op_errstr, } } - snap->snap_status = GD_SNAP_STATUS_IN_USE; - ret = glusterd_store_snap (snap); - if (ret) { - gf_log (this->name, GF_LOG_WARNING, "Could not store snap" - "object %s", snap->snapname); - goto out; - } - ret = 0; out: @@ -5425,6 +5417,9 @@ glusterd_snapshot_create_postvalidate (dict_t *dict, int32_t op_ret, xlator_t *this = NULL; glusterd_conf_t *priv = NULL; int ret = -1; + int32_t cleanup = 0; + glusterd_snap_t *snap = NULL; + char *snapname = NULL; this = THIS; @@ -5436,23 +5431,49 @@ glusterd_snapshot_create_postvalidate (dict_t *dict, int32_t op_ret, GF_ASSERT (priv); if (op_ret) { - ret = glusterd_do_snap_cleanup (dict, op_errstr, rsp_dict); - if (ret) { - gf_log (this->name, GF_LOG_WARNING, "cleanup operation " - "failed"); - goto out; - } - } else { - ret = glusterd_snapshot_update_snaps_post_validate (dict, - op_errstr, - rsp_dict); - if (ret) { - gf_log (this->name, GF_LOG_ERROR, "Failed to " - "create snapshot"); - goto out; + ret = dict_get_int32 (dict, "cleanup", &cleanup); + if (!ret && cleanup) { + ret = glusterd_do_snap_cleanup (dict, op_errstr, + rsp_dict); + if (ret) { + gf_log (this->name, GF_LOG_WARNING, "cleanup " + "operation failed"); + goto out; + } } } + ret = dict_get_str (dict, "snapname", &snapname); + if (ret) { + gf_log (this->name, GF_LOG_ERROR, "Unable to fetch " + "snapname"); + goto out; + } + + snap = glusterd_find_snap_by_name (snapname); + if (!snap) { + gf_log (this->name, GF_LOG_ERROR, "unable to find snap " + "%s", snapname); + goto out; + } + + snap->snap_status = GD_SNAP_STATUS_IN_USE; + ret = glusterd_store_snap (snap); + if (ret) { + gf_log (this->name, GF_LOG_WARNING, "Could not store snap" + "object %s", snap->snapname); + goto out; + } + + ret = glusterd_snapshot_update_snaps_post_validate (dict, + op_errstr, + rsp_dict); + if (ret) { + gf_log (this->name, GF_LOG_ERROR, "Failed to " + "create snapshot"); + goto out; + } + ret = 0; out: return ret; |