summaryrefslogtreecommitdiffstats
path: root/xlators/mgmt/glusterd/src/glusterd-handshake.c
diff options
context:
space:
mode:
authorRaghavendra Bhat <raghavendra@redhat.com>2013-10-23 14:07:29 +0530
committershishir gowda <sgowda@redhat.com>2013-11-15 12:38:59 +0530
commit8b5a3ef2f5363abd4e4d8d49c067cba8e4df8fdd (patch)
tree4595bdfc3acb0940bca4aa0a324138ad28c47b9c /xlators/mgmt/glusterd/src/glusterd-handshake.c
parentda3a265c36b1326405dafce98b29d7c72001a7e9 (diff)
mgmt/glusterd: changes to start the brick process of the snap volume
Change-Id: I54db2fa67ebb6b57629f9536c296fbae07a1d159 Signed-off-by: Raghavendra Bhat <raghavendra@redhat.com>
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-handshake.c')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-handshake.c49
1 files changed, 42 insertions, 7 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-handshake.c b/xlators/mgmt/glusterd/src/glusterd-handshake.c
index e7d6d841b..714695bc1 100644
--- a/xlators/mgmt/glusterd/src/glusterd-handshake.c
+++ b/xlators/mgmt/glusterd/src/glusterd-handshake.c
@@ -51,6 +51,10 @@ build_volfile_path (const char *volname, char *path,
char *tmp = NULL;
glusterd_volinfo_t *volinfo = NULL;
char *server = NULL;
+ gf_boolean_t snap_volume = _gf_false;
+ char *str = NULL;
+ char *tmp_volname = NULL;
+ char *input_vol = NULL;
priv = THIS->private;
@@ -60,6 +64,17 @@ build_volfile_path (const char *volname, char *path,
path, path_len);
ret = 1;
goto out;
+ } else if (strstr (volname, "/snaps/")) {
+ input_vol = gf_strdup (volname);
+ snap_volume = _gf_true;
+ str = strrchr (volname, '/');
+ if (str)
+ str++;
+ dup_volname = gf_strdup (str);
+ str = NULL;
+ tmp_volname = strtok_r (input_vol, "/", &str);
+ if (!tmp_volname)
+ goto out;
} else if (volname[0] != '/') {
/* Normal behavior */
dup_volname = gf_strdup (volname);
@@ -86,28 +101,48 @@ build_volfile_path (const char *volname, char *path,
if (!glusterd_auth_get_username (volinfo))
trusted_str = NULL;
- ret = snprintf (path, path_len, "%s/vols/%s/%s.vol",
- priv->workdir, volinfo->volname, volname);
+ if (!snap_volume)
+ ret = snprintf (path, path_len, "%s/vols/%s/%s.vol",
+ priv->workdir, volinfo->volname, volname);
+ else
+ ret = snprintf (path, path_len, "%s/vols/%s/snaps/%s/%s.vol",
+ priv->workdir, tmp_volname, volinfo->volname,
+ volname);
if (ret == -1)
goto out;
ret = stat (path, &stbuf);
if ((ret == -1) && (errno == ENOENT)) {
- snprintf (path, path_len, "%s/vols/%s/%s%s-fuse.vol",
- priv->workdir, volinfo->volname,
- (trusted_str ? trusted_str : ""), dup_volname);
+ if (!snap_volume)
+ snprintf (path, path_len, "%s/vols/%s/%s%s-fuse.vol",
+ priv->workdir, volinfo->volname,
+ (trusted_str ? trusted_str : ""),
+ dup_volname);
+ else
+ snprintf (path, path_len,
+ "%s/vols/%s/snaps/%s/%s%s-fuse.vol",
+ priv->workdir, tmp_volname, volinfo->volname,
+ (trusted_str ? trusted_str:""), dup_volname);
+
ret = stat (path, &stbuf);
}
if ((ret == -1) && (errno == ENOENT)) {
- snprintf (path, path_len, "%s/vols/%s/%s-tcp.vol",
- priv->workdir, volinfo->volname, volname);
+ if (!snap_volume)
+ snprintf (path, path_len, "%s/vols/%s/%s-tcp.vol",
+ priv->workdir, volinfo->volname, volname);
+ else
+ snprintf (path, path_len,
+ "%s/vols/%s/snaps/%s/%s-tcp.vol",
+ priv->workdir, tmp_volname, volinfo->volname,
+ volname);
}
ret = 1;
out:
GF_FREE (free_ptr);
+ GF_FREE (input_vol);
return ret;
}