diff options
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-handshake.c')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-handshake.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-handshake.c b/xlators/mgmt/glusterd/src/glusterd-handshake.c index 84dd077af73..7cc5e98814f 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, char *vol = NULL; glusterd_snap_t *snap = NULL; xlator_t *this = NULL; + char *volfile_token = NULL; this = THIS; GF_ASSERT (this); @@ -102,12 +103,27 @@ 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) { @@ -116,7 +132,7 @@ get_snap_volname_and_volinfo (const char *volpath, char **volname, if (!vol) { gf_msg (this->name, GF_LOG_ERROR, EINVAL, GD_MSG_INVALID_ENTRY, "Invalid " - "volname (%s)", volname_token); + "volname (%s)", volfile_token); goto out; } |