summaryrefslogtreecommitdiffstats
path: root/xlators/mgmt/glusterd/src/glusterd-store.c
diff options
context:
space:
mode:
authorAvra Sengupta <asengupt@redhat.com>2015-06-03 15:18:08 +0530
committerKrishnan Parthasarathi <kparthas@redhat.com>2015-06-05 02:22:00 -0700
commitbf3a6dcdf3c8a8a64e7c864b56c4d9be60fca8e6 (patch)
tree5db40559aca941e8de5793e3f3b181261116fce7 /xlators/mgmt/glusterd/src/glusterd-store.c
parentd2d7afefd861943f26b290d214fb5213d24b6a02 (diff)
snapshot: Fix finding brick mount path logic
Previously while finding brick mount paths of snap volume's bricks, we were taking brick order into consideration. This logic fails when a brick is removed or a tier is added. Hence modifying the logic to look for the first occurence of the word "brick" in the brick path. From there we iterate till we find a '/'. The string till the first '/' after we encounter the word brick is the brick mount path. Change-Id: Ic85983c4e975e701cdfd4e13f8e276ac391a3e49 BUG: 1227646 Signed-off-by: Avra Sengupta <asengupt@redhat.com> Reviewed-on: http://review.gluster.org/11060 Tested-by: Gluster Build System <jenkins@build.gluster.com> Tested-by: NetBSD Build System <jenkins@build.gluster.org> Reviewed-by: Rajesh Joseph <rjoseph@redhat.com> Reviewed-by: Krishnan Parthasarathi <kparthas@redhat.com>
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-store.c')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-store.c22
1 files changed, 10 insertions, 12 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-store.c b/xlators/mgmt/glusterd/src/glusterd-store.c
index 4a330c138a4..45f955fad90 100644
--- a/xlators/mgmt/glusterd/src/glusterd-store.c
+++ b/xlators/mgmt/glusterd/src/glusterd-store.c
@@ -2967,11 +2967,10 @@ out:
/* Figure out the brick mount path, from the brick path */
int32_t
-glusterd_find_brick_mount_path (char *brick_path, int32_t brick_count,
- char **brick_mount_path)
+glusterd_find_brick_mount_path (char *brick_path, char **brick_mount_path)
{
- char brick_num[PATH_MAX] = "";
char *ptr = NULL;
+ char *save_ptr = NULL;
int32_t ret = -1;
xlator_t *this = NULL;
@@ -2986,12 +2985,10 @@ glusterd_find_brick_mount_path (char *brick_path, int32_t brick_count,
goto out;
}
- snprintf (brick_num, sizeof(brick_num), "brick%d", brick_count);
-
/* Finding the pointer to the end of
* /var/run/gluster/snaps/<snap-uuid>
*/
- ptr = strstr (*brick_mount_path, brick_num);
+ ptr = strstr (*brick_mount_path, "brick");
if (!ptr) {
/* Snapshot bricks must have brick num as part
* of the brickpath
@@ -3006,8 +3003,13 @@ glusterd_find_brick_mount_path (char *brick_path, int32_t brick_count,
* /var/run/gluster/snaps/<snap-uuid>/<brick_num>
* and assigning '\0' to it.
*/
- ptr += strlen(brick_num);
- *ptr = '\0';
+ while ((*ptr != '\0') && (*ptr != '/'))
+ ptr++;
+
+ if (*ptr == '/') {
+ ptr++;
+ *ptr = '\0';
+ }
ret = 0;
out:
@@ -3091,15 +3093,12 @@ glusterd_recreate_vol_brick_mounts (xlator_t *this,
char *brick_mount_path = NULL;
glusterd_brickinfo_t *brickinfo = NULL;
int32_t ret = -1;
- int32_t brick_count = -1;
struct stat st_buf = {0, };
GF_ASSERT (this);
GF_ASSERT (volinfo);
- brick_count = 0;
cds_list_for_each_entry (brickinfo, &volinfo->bricks, brick_list) {
- brick_count++;
/* If the brick is not of this node, or its
* snapshot is pending, or the brick is not
* a snapshotted brick, we continue
@@ -3111,7 +3110,6 @@ glusterd_recreate_vol_brick_mounts (xlator_t *this,
/* Fetch the brick mount path from the brickinfo->path */
ret = glusterd_find_brick_mount_path (brickinfo->path,
- brick_count,
&brick_mount_path);
if (ret) {
gf_log (this->name, GF_LOG_ERROR,