diff options
author | Raghavendra Bhat <raghavendra@redhat.com> | 2013-10-23 14:07:29 +0530 |
---|---|---|
committer | shishir gowda <sgowda@redhat.com> | 2013-11-15 12:38:59 +0530 |
commit | 8b5a3ef2f5363abd4e4d8d49c067cba8e4df8fdd (patch) | |
tree | 4595bdfc3acb0940bca4aa0a324138ad28c47b9c /xlators/mgmt/glusterd/src/glusterd-handshake.c | |
parent | da3a265c36b1326405dafce98b29d7c72001a7e9 (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.c | 49 |
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; } |