diff options
-rw-r--r-- | xlators/features/snapview-server/src/snapview-server-helpers.c | 4 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-handshake.c | 20 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-utils.c | 8 |
3 files changed, 23 insertions, 9 deletions
diff --git a/xlators/features/snapview-server/src/snapview-server-helpers.c b/xlators/features/snapview-server/src/snapview-server-helpers.c index 3f8a76946f..2559c4e089 100644 --- a/xlators/features/snapview-server/src/snapview-server-helpers.c +++ b/xlators/features/snapview-server/src/snapview-server-helpers.c @@ -497,8 +497,8 @@ __svs_initialise_snapshot_volume(xlator_t *this, const char *name, goto out; } - snprintf(volname, sizeof(volname), "/snaps/%s/%s", dirent->name, - dirent->snap_volname); + snprintf(volname, sizeof(volname), "/snaps/%s/%s/%s", dirent->name, + dirent->snap_volname, dirent->snap_volname); fs = glfs_new(volname); if (!fs) { diff --git a/xlators/mgmt/glusterd/src/glusterd-handshake.c b/xlators/mgmt/glusterd/src/glusterd-handshake.c index 809d462dec..d341b4918d 100644 --- a/xlators/mgmt/glusterd/src/glusterd-handshake.c +++ b/xlators/mgmt/glusterd/src/glusterd-handshake.c @@ -53,6 +53,7 @@ get_snap_volname_and_volinfo(const char *volpath, char **volname, glusterd_snap_t *snap = NULL; xlator_t *this = NULL; char *tmp_str_token = NULL; + char *volfile_token = NULL; this = THIS; GF_ASSERT(this); @@ -103,21 +104,34 @@ get_snap_volname_and_volinfo(const char *volpath, char **volname, */ ret = glusterd_volinfo_find(volname_token, volinfo); if (ret) { - *volname = gf_strdup(volname_token); + gf_msg(this->name, GF_LOG_WARNING, 0, GD_MSG_VOLINFO_GET_FAIL, + "failed to get the volinfo for the volume %s", volname_token); + + /* Get the actual volfile name. */ + volfile_token = strtok_r(NULL, "/", &save_ptr); + *volname = gf_strdup(volfile_token); if (NULL == *volname) { ret = -1; goto out; } + /* + * Ideally, this should succeed as volname_token now contains + * the name of the snap volume (i.e. name of the volume that + * represents the snapshot). But, if for some reason, volinfo + * for the snap volume is not found, then try to get from the + * name of the volfile. Name of the volfile is like this. + * <snap volume name>.<hostname>.<brick path>.vol + */ ret = glusterd_snap_volinfo_find(volname_token, snap, volinfo); if (ret) { /* Split the volume name */ - vol = strtok_r(volname_token, ".", &save_ptr); + vol = strtok_r(volfile_token, ".", &save_ptr); if (!vol) { gf_msg(this->name, GF_LOG_ERROR, EINVAL, GD_MSG_INVALID_ENTRY, "Invalid " "volname (%s)", - volname_token); + volfile_token); goto out; } diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c index 9b9e6f88f0..757560e68d 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-utils.c @@ -2131,10 +2131,10 @@ retry: } if (volinfo->is_snap_volume) { - len = snprintf(volfile, PATH_MAX, "/%s/%s/%s.%s.%s", + len = snprintf(volfile, PATH_MAX, "/%s/%s/%s/%s.%s.%s", GLUSTERD_VOL_SNAP_DIR_PREFIX, volinfo->snapshot->snapname, volinfo->volname, - brickinfo->hostname, exp_path); + volinfo->volname, brickinfo->hostname, exp_path); } else { len = snprintf(volfile, PATH_MAX, "%s.%s.%s", volinfo->volname, brickinfo->hostname, exp_path); @@ -5659,10 +5659,10 @@ attach_brick(xlator_t *this, glusterd_brickinfo_t *brickinfo, GLUSTERD_GET_BRICK_PIDFILE(pidfile2, volinfo, brickinfo, conf); if (volinfo->is_snap_volume) { - len = snprintf(full_id, sizeof(full_id), "/%s/%s/%s.%s.%s", + len = snprintf(full_id, sizeof(full_id), "/%s/%s/%s/%s.%s.%s", GLUSTERD_VOL_SNAP_DIR_PREFIX, volinfo->snapshot->snapname, volinfo->volname, - brickinfo->hostname, unslashed); + volinfo->volname, brickinfo->hostname, unslashed); } else { len = snprintf(full_id, sizeof(full_id), "%s.%s.%s", volinfo->volname, brickinfo->hostname, unslashed); |