diff options
author | Rajesh Joseph <rjoseph@redhat.com> | 2014-03-05 18:26:37 +0530 |
---|---|---|
committer | Rajesh Joseph <rjoseph@redhat.com> | 2014-03-10 05:24:09 -0700 |
commit | 8f87071658ae8d0799f752a9f7f951fbd46ceda7 (patch) | |
tree | 33bf64697b10cb3ea71780ba45a913e2358a87be /xlators/mgmt/glusterd/src/glusterd-snapshot.c | |
parent | 586e1cabf850211b9e6856fcb8c42c696de6d484 (diff) |
glusterd/snapshot: Modified restore backend
Now instead of creating volume store files first we constructing
the in-memory volinfo first and then generate the backend store
files. This gives lot of flexibility in restore operation.
This patch also fixes the read-only issue with restored snaps.
Change-Id: I51032228a5212fc3b90dc6e93f3539af3eb36074
BUG: 1064688
Signed-off-by: Rajesh Joseph <rjoseph@redhat.com>
Reviewed-on: http://review.gluster.org/7209
Reviewed-by: Sachin Pandit <spandit@redhat.com>
Reviewed-by: Vijaikumar Mallikarjuna <vmallika@redhat.com>
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-snapshot.c')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-snapshot.c | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-snapshot.c b/xlators/mgmt/glusterd/src/glusterd-snapshot.c index 7960e84ac..2b2cc1adc 100644 --- a/xlators/mgmt/glusterd/src/glusterd-snapshot.c +++ b/xlators/mgmt/glusterd/src/glusterd-snapshot.c @@ -1191,6 +1191,7 @@ out: int32_t glusterd_snap_volume_remove (glusterd_volinfo_t *snap_vol, + gf_boolean_t remove_lvm, gf_boolean_t force) { int ret = -1; @@ -1223,13 +1224,17 @@ glusterd_snap_volume_remove (glusterd_volinfo_t *snap_vol, goto out; } } - ret = glusterd_lvm_snapshot_remove (snap_vol); - if (ret) { - gf_log(this->name, GF_LOG_WARNING, "Failed to remove " - "lvm snapshot volume %s", snap_vol->volname); - ret_1 = ret; - if (!force) - goto out; + + /* Only remove the backend lvm when required */ + if (remove_lvm) { + ret = glusterd_lvm_snapshot_remove (snap_vol); + if (ret) { + gf_log(this->name, GF_LOG_WARNING, "Failed to remove " + "lvm snapshot volume %s", snap_vol->volname); + ret_1 = ret; + if (!force) + goto out; + } } ret = glusterd_store_delete_volume (snap_vol); @@ -1291,6 +1296,7 @@ glusterd_snapobject_delete (glusterd_snap_t *snap) int32_t glusterd_snap_remove (glusterd_snap_t *snap, + gf_boolean_t remove_lvm, gf_boolean_t force) { int ret = -1; @@ -1308,7 +1314,8 @@ glusterd_snap_remove (glusterd_snap_t *snap, } list_for_each_entry_safe (snap_vol, tmp, &snap->volumes, vol_list) { - ret = glusterd_snap_volume_remove (snap_vol, force); + ret = glusterd_snap_volume_remove (snap_vol, + remove_lvm, force); if (ret) { gf_log(this->name, GF_LOG_WARNING, "Failed to remove " "volinfo %s for snap %s", snap_vol->volname, @@ -2538,7 +2545,7 @@ glusterd_create_snap_object (dict_t *dict) out: if (ret) { if (snap) - glusterd_snap_remove (snap, _gf_true); + glusterd_snap_remove (snap, _gf_true,_gf_true); snap=NULL; } @@ -2906,7 +2913,11 @@ glusterd_do_snap_vol (glusterd_volinfo_t *origin_vol, glusterd_snap_t *snap, goto out; } - ret = glusterd_volinfo_dup (origin_vol, &snap_vol); + /* We are not setting the username and password here as + * we need to set the user name and password passed in + * the dictionary + */ + ret = glusterd_volinfo_dup (origin_vol, &snap_vol, _gf_false); if (ret) { gf_log (this->name, GF_LOG_ERROR, "Failed to duplicate volinfo " "for the snapshot %s", snap->snapname); @@ -3056,7 +3067,8 @@ glusterd_do_snap_vol (glusterd_volinfo_t *origin_vol, glusterd_snap_t *snap, out: if (ret) { if (snap_vol) - glusterd_snap_volume_remove (snap_vol, _gf_true); + glusterd_snap_volume_remove (snap_vol, + _gf_true, _gf_true); snap_vol = NULL; } @@ -3252,7 +3264,7 @@ glusterd_snapshot_remove_commit (dict_t *dict, char **op_errstr, goto out; } - ret = glusterd_snap_remove (snap, _gf_false); + ret = glusterd_snap_remove (snap, _gf_true, _gf_false); if (ret){ gf_log (this->name, GF_LOG_ERROR, "Failed to remove snap %s", snapname); @@ -3369,7 +3381,7 @@ glusterd_snapshot_create_commit (dict_t *dict, char **op_errstr, out: if (ret) { if (snap) - glusterd_snap_remove (snap, _gf_true); + glusterd_snap_remove (snap, _gf_true, _gf_true); snap=NULL; } |