From 58dfda2a4e0ffad3a543fb47242c5cfdf0ea6bed Mon Sep 17 00:00:00 2001 From: Vijaikumar M Date: Tue, 25 Mar 2014 15:58:18 +0530 Subject: glusterd/snapshot : remove snap_volume variable from struct glusterd_snap_ Change-Id: I3c5eae3f199d97a2fe70599e2cdb4c357d20f20d Signed-off-by: Vijaikumar M Reviewed-on: http://review.gluster.org/7197 Reviewed-by: Rajesh Joseph Tested-by: Rajesh Joseph --- xlators/mgmt/glusterd/src/glusterd-snapshot.c | 85 ++++++++++++++++----------- 1 file changed, 51 insertions(+), 34 deletions(-) (limited to 'xlators/mgmt/glusterd/src/glusterd-snapshot.c') diff --git a/xlators/mgmt/glusterd/src/glusterd-snapshot.c b/xlators/mgmt/glusterd/src/glusterd-snapshot.c index 7068a04bb..90f0c6c22 100644 --- a/xlators/mgmt/glusterd/src/glusterd-snapshot.c +++ b/xlators/mgmt/glusterd/src/glusterd-snapshot.c @@ -794,11 +794,6 @@ glusterd_list_add_snapvol (glusterd_volinfo_t *origin_vol, GF_ASSERT (snap); list_add_tail (&snap_vol->vol_list, &snap->volumes); - /* TODO: As of now there is only one volume per snapshot. - Below line should be removed once multiple volumes for - snap driven structucture is implemented */ - snap->snap_volume = snap_vol; - LOCK (&origin_vol->lock); { list_add_order (&snap_vol->snapvol_list, @@ -2794,7 +2789,6 @@ glusterd_do_snap_vol (glusterd_volinfo_t *origin_vol, glusterd_snap_t *snap, snap_vol->is_snap_volume = _gf_true; strcpy (snap_vol->parent_volname, origin_vol->volname); snap_vol->snapshot = snap; - snap->snap_volume = snap_vol; glusterd_auth_set_username (snap_vol, username); glusterd_auth_set_password (snap_vol, password); @@ -3959,14 +3953,17 @@ out : int glusterd_get_single_snap_status (char **op_errstr, dict_t *rsp_dict, - char *keyprefix, - glusterd_volinfo_t *snap_volinfo) + char *keyprefix, glusterd_snap_t *snap) { - int ret = -1; - xlator_t *this = NULL; - char key[PATH_MAX] = ""; - glusterd_brickinfo_t *brickinfo = NULL; - int i = 0; + int ret = -1; + xlator_t *this = NULL; + char key[PATH_MAX] = ""; + char brickkey[PATH_MAX] = ""; + glusterd_volinfo_t *snap_volinfo = NULL; + glusterd_volinfo_t *tmp_volinfo = NULL; + glusterd_brickinfo_t *brickinfo = NULL; + int volcount = 0; + int brickcount = 0; this = THIS; GF_ASSERT (this); @@ -3974,37 +3971,61 @@ glusterd_get_single_snap_status (char **op_errstr, dict_t *rsp_dict, GF_ASSERT (op_errstr); GF_ASSERT (rsp_dict); GF_ASSERT (keyprefix); - GF_ASSERT (snap_volinfo); + GF_ASSERT (snap); - list_for_each_entry (brickinfo, &snap_volinfo->bricks, brick_list) { - if (!glusterd_is_local_brick (this, snap_volinfo, brickinfo)) { - i++; - continue; + list_for_each_entry_safe (snap_volinfo, tmp_volinfo, &snap->volumes, + vol_list) { + ret = snprintf (key, sizeof (key), "%s.vol%d", keyprefix, + volcount); + if (ret < 0) { + goto out; } + list_for_each_entry (brickinfo, &snap_volinfo->bricks, + brick_list) { + if (!glusterd_is_local_brick (this, snap_volinfo, + brickinfo)) { + brickcount++; + continue; + } - ret = glusterd_get_single_brick_status (op_errstr, rsp_dict, - keyprefix, i, - snap_volinfo, - brickinfo); + ret = glusterd_get_single_brick_status (op_errstr, + rsp_dict, key, brickcount, + snap_volinfo, brickinfo); + + if (ret) { + gf_log (this->name, GF_LOG_ERROR, "Getting " + "single snap status failed"); + goto out; + } + brickcount++; + } + ret = snprintf (brickkey, sizeof (brickkey), "%s.brickcount", + key); + if (ret < 0) { + goto out; + } + ret = dict_set_int32 (rsp_dict, brickkey, brickcount); if (ret) { - gf_log (this->name, GF_LOG_ERROR, "Getting single " - "snap status failed"); + gf_log (this->name, GF_LOG_ERROR, + "Could not save brick count"); goto out; } - i++; + volcount++; } - ret = snprintf (key, sizeof (key), "%s.brickcount", keyprefix); + + ret = snprintf (key, sizeof (key), "%s.volcount", keyprefix); if (ret < 0) { goto out; } - ret = dict_set_int32 (rsp_dict, key, i); + ret = dict_set_int32 (rsp_dict, key, volcount); if (ret) { gf_log (this->name, GF_LOG_ERROR, - "Could not save brick count"); + "Could not save volcount"); goto out; } + out : return ret; @@ -4068,12 +4089,8 @@ glusterd_get_each_snap_object_status (char **op_errstr, dict_t *rsp_dict, temp = NULL; - ret = snprintf (key, sizeof (key), "%s.vol0", keyprefix); - if (ret < 0) { - goto out; - } - ret = glusterd_get_single_snap_status (op_errstr, rsp_dict, key, - snap->snap_volume); + ret = glusterd_get_single_snap_status (op_errstr, rsp_dict, keyprefix, + snap); if (ret) { gf_log (this->name, GF_LOG_ERROR, "Could not get single snap status"); -- cgit