summaryrefslogtreecommitdiffstats
path: root/xlators/mgmt/glusterd/src/glusterd-store.c
diff options
context:
space:
mode:
authorRajesh Joseph <rjoseph@redhat.com>2014-04-23 18:36:34 +0530
committerVijay Bellur <vbellur@redhat.com>2014-05-02 23:33:10 -0700
commit66f560e0071db84d430f38b996364f6b8c4f0f6d (patch)
tree3feda2f915c4f4eefc6e1e50eddf1918ff62d2a6 /xlators/mgmt/glusterd/src/glusterd-store.c
parentf48656b32e328f96bda5aade55070867d5faf333 (diff)
glusterd/snapshot: Restore cleanup
If restores fails for some reason then we should revert the restore operation. To do so we take the backup of vols folder before doing a restore and if the restore fails then we revert the changes done. Change-Id: I97f72aec3a34fc122bf137beb336e94db3a04dff BUG: 1061685 Signed-off-by: Rajesh Joseph <rjoseph@redhat.com> Reviewed-on: http://review.gluster.org/7548 Reviewed-by: Santosh Pradhan <spradhan@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-store.c')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-store.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-store.c b/xlators/mgmt/glusterd/src/glusterd-store.c
index 3993504e8b0..ab635ff943f 100644
--- a/xlators/mgmt/glusterd/src/glusterd-store.c
+++ b/xlators/mgmt/glusterd/src/glusterd-store.c
@@ -3871,6 +3871,11 @@ out:
* dies after taking the backend snapshot, but before updating the
* status, then when glusterd comes up, it should treat that snapshot
* as a failed snapshot and clean it up.
+ *
+ * Restore operation starts by setting the status to
+ * GD_SNAP_STATUS_RESTORED. If the server goes down before changing
+ * the status the status back we need to revert the partial snapshot
+ * taken.
*/
int32_t
glusterd_snap_cleanup (xlator_t *this)
@@ -3893,7 +3898,15 @@ glusterd_snap_cleanup (xlator_t *this)
}
list_for_each_entry (snap, &priv->snapshots, snap_list) {
- if (snap->snap_status != GD_SNAP_STATUS_IN_USE) {
+ if (snap->snap_status == GD_SNAP_STATUS_RESTORED) {
+ ret = glusterd_snapshot_revert_restore_from_snap (snap);
+ if (ret) {
+ gf_log (this->name, GF_LOG_WARNING, "Failed to "
+ "revert partially restored snapshot "
+ "(%s)", snap->snapname);
+ goto out;
+ }
+ } else if (snap->snap_status != GD_SNAP_STATUS_IN_USE) {
ret = glusterd_snap_remove (dict, snap,
_gf_true, _gf_true);
if (ret) {