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>
This commit is contained in:
parent
d2d7afefd8
commit
bf3a6dcdf3
32
tests/bugs/snapshot/bug-1227646.t
Normal file
32
tests/bugs/snapshot/bug-1227646.t
Normal file
@ -0,0 +1,32 @@
|
||||
#!/bin/bash
|
||||
|
||||
. $(dirname $0)/../../volume.rc
|
||||
. $(dirname $0)/../../snapshot.rc
|
||||
. $(dirname $0)/../../include.rc
|
||||
|
||||
cleanup;
|
||||
|
||||
TEST init_n_bricks 3;
|
||||
TEST setup_lvm 3;
|
||||
|
||||
TEST glusterd;
|
||||
TEST pidof glusterd;
|
||||
|
||||
#TEST $CLI volume create $V0 $H0:$L1 $H0:$L2 $H0:$L3;
|
||||
TEST $CLI volume create $V0 $H0:$L2 $H0:$L3;
|
||||
TEST $CLI volume start $V0;
|
||||
|
||||
TEST $CLI snapshot create snap1 $V0 no-timestamp;
|
||||
TEST $CLI volume stop $V0
|
||||
TEST $CLI snapshot restore snap1;
|
||||
TEST $CLI volume start $V0
|
||||
TEST $CLI volume attach-tier $V0 $H0:$L1 $H0:$L2
|
||||
|
||||
TEST pkill gluster
|
||||
TEST glusterd
|
||||
EXPECT_WITHIN $PROCESS_UP_TIMEOUT 'Started' volinfo_field $V0 'Status'
|
||||
|
||||
TEST $CLI volume stop $V0
|
||||
|
||||
cleanup ;
|
||||
|
@ -2716,7 +2716,6 @@ glusterd_lvm_snapshot_remove (dict_t *rsp_dict, glusterd_volinfo_t *snap_vol)
|
||||
|
||||
/* Fetch the brick mount path from the brickinfo->path */
|
||||
ret = glusterd_find_brick_mount_path (brickinfo->path,
|
||||
brick_count + 1,
|
||||
&brick_mount_path);
|
||||
if (ret) {
|
||||
gf_msg (this->name, GF_LOG_ERROR, 0,
|
||||
|
@ -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,
|
||||
|
@ -577,8 +577,8 @@ int
|
||||
glusterd_unlink_file (char *sock_file_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);
|
||||
|
||||
/*
|
||||
* Function to retrieve list of snap volnames and their uuids
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user