diff options
author | Raghavendra Bhat <raghavendra@redhat.com> | 2013-10-24 15:05:04 +0530 |
---|---|---|
committer | shishir gowda <sgowda@redhat.com> | 2013-11-15 12:48:08 +0530 |
commit | 262d9379e1dbe909e2a622a7e1806b70d3a59591 (patch) | |
tree | e3d82515f33762011e63cb082bc8c238938221b6 /xlators/mgmt/glusterd/src/glusterd-store.c | |
parent | d8c95f33e2557aff81d4a7f3e22f1c784183f5aa (diff) |
mgmt/glusterd: handle snap volume store and actual volume store separately
Change-Id: I8b88fe94d0f9ee1089cafdda037abcf2f7a180ca
Signed-off-by: Raghavendra Bhat <raghavendra@redhat.com>
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-store.c')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-store.c | 49 |
1 files changed, 35 insertions, 14 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-store.c b/xlators/mgmt/glusterd/src/glusterd-store.c index 39f3671eb..bbff2f4bb 100644 --- a/xlators/mgmt/glusterd/src/glusterd-store.c +++ b/xlators/mgmt/glusterd/src/glusterd-store.c @@ -1704,7 +1704,7 @@ glusterd_store_volinfo (glusterd_volinfo_t *volinfo, glusterd_volinfo_ver_ac_t a goto out; //checksum should be computed at the end - ret = glusterd_volume_compute_cksum (volinfo); + ret = glusterd_volume_compute_cksum (volinfo, NULL); if (ret) goto out; @@ -2137,7 +2137,8 @@ out: int32_t -glusterd_store_retrieve_bricks (glusterd_volinfo_t *volinfo, char *snap_name) +glusterd_store_retrieve_bricks (glusterd_volinfo_t *volinfo, + glusterd_volinfo_t *snap_volinfo) { int32_t ret = 0; @@ -2154,25 +2155,34 @@ glusterd_store_retrieve_bricks (glusterd_volinfo_t *volinfo, char *snap_name) char *tmpvalue = NULL; struct pmap_registry *pmap = NULL; gf_store_op_errno_t op_errno = GD_STORE_SUCCESS; + glusterd_volinfo_t *tmp_volinfo = NULL; GF_ASSERT (volinfo); GF_ASSERT (volinfo->volname); priv = THIS->private; - if (snap_name) { - GLUSTERD_GET_SNAP_BRICK_DIR (brickdir, volinfo, snap_name, - priv); + if (snap_volinfo) { + GLUSTERD_GET_SNAP_BRICK_DIR (brickdir, volinfo, + snap_volinfo->volname, priv); } else { GLUSTERD_GET_BRICK_DIR (brickdir, volinfo, priv); } - ret = gf_store_iter_new (volinfo->shandle, &tmpiter); + if (snap_volinfo) + ret = gf_store_iter_new (snap_volinfo->shandle, &tmpiter); + else + ret = gf_store_iter_new (volinfo->shandle, &tmpiter); if (ret) goto out; - while (brick_count < volinfo->brick_count) { + if (snap_volinfo) + tmp_volinfo = snap_volinfo; + else + tmp_volinfo = volinfo; + + while (brick_count < tmp_volinfo->brick_count) { ret = glusterd_brickinfo_new (&brickinfo); if (ret) @@ -2274,7 +2284,7 @@ glusterd_store_retrieve_bricks (glusterd_volinfo_t *volinfo, char *snap_name) if (ret) goto out; - list_add_tail (&brickinfo->brick_list, &volinfo->bricks); + list_add_tail (&brickinfo->brick_list, &tmp_volinfo->bricks); brick_count++; } @@ -2468,7 +2478,7 @@ out: } int32_t -glusterd_store_retrieve_volume (char *volname, glusterd_snap_t *snap) +glusterd_store_retrieve_volume (char *volname, glusterd_snap_t *snap) { int32_t ret = -1; glusterd_volinfo_t *volinfo = NULL; @@ -2480,18 +2490,24 @@ glusterd_store_retrieve_volume (char *volname, glusterd_snap_t *snap) char path[PATH_MAX] = {0,}; int exists = 0; gf_store_op_errno_t op_errno = GD_STORE_SUCCESS; + glusterd_volinfo_t *parent_vol = NULL; + + GF_ASSERT (volname); ret = glusterd_volinfo_new (&volinfo); if (ret) goto out; - strncpy (volinfo->volname, volname, GLUSTERD_MAX_VOLUME_NAME); - priv = THIS->private; if (snap) { - GLUSTERD_GET_SNAP_DIR (volpath, volinfo, snap->snap_name, priv); + ret = glusterd_volinfo_find (volname, &parent_vol); + if (ret) + goto out; + strncpy (volinfo->volname, snap->snap_name, GLUSTERD_MAX_VOLUME_NAME); + GLUSTERD_GET_SNAP_DIR (volpath, parent_vol, snap->snap_name, priv); } else { + strncpy (volinfo->volname, volname, GLUSTERD_MAX_VOLUME_NAME); GLUSTERD_GET_VOLUME_DIR(volpath, volinfo, priv); } snprintf (path, sizeof (path), "%s/%s", volpath, @@ -2670,13 +2686,16 @@ glusterd_store_retrieve_volume (char *volname, glusterd_snap_t *snap) goto out; if (snap) - ret = glusterd_store_retrieve_bricks (volinfo, snap->snap_name); + ret = glusterd_store_retrieve_bricks (parent_vol, volinfo); else ret = glusterd_store_retrieve_bricks (volinfo, NULL); if (ret) goto out; - ret = glusterd_volume_compute_cksum (volinfo); + if (snap) + ret = glusterd_volume_compute_cksum (parent_vol, volinfo); + else + ret = glusterd_volume_compute_cksum (volinfo, NULL); if (ret) goto out; @@ -2684,7 +2703,9 @@ glusterd_store_retrieve_volume (char *volname, glusterd_snap_t *snap) if (!snap) { list_add_tail (&volinfo->vol_list, &priv->volumes); } else { + // as of now snap volume are also added to the list of volume snap->snap_volume = volinfo; + list_add_tail (&volinfo->vol_list, &priv->volumes); } |