diff options
author | Jiffin Tony Thottan <jthottan@gmail.com> | 2016-03-17 18:53:13 +0530 |
---|---|---|
committer | Atin Mukherjee <amukherj@redhat.com> | 2016-08-08 07:23:50 -0700 |
commit | 720b63c24b07ee64e1338db28de602b9abbef0a1 (patch) | |
tree | 3727156a894e30be7f70df937929b47f920f0cc2 | |
parent | a432e7bc80dee70a48ccc5f04f5574cdce18a3a5 (diff) |
glusterd : skip non directories inside /var/lib/glusterd/vols
Right now glusterd won't come up if vols directory contains an invalid entry.
Instead of doing that with this change a message will be logged and then skip
that entry
Change-Id: I665b5c35291b059cf054622da0eec4db44ec5f68
BUG: 1318591
Signed-off-by: Jiffin Tony Thottan <jthottan@redhat.com>
Reviewed-on: http://review.gluster.org/13764
Reviewed-by: Prashanth Pai <ppai@redhat.com>
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
Smoke: Gluster Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
-rw-r--r-- | tests/bugs/glusterd/bug-1318591-skip-non-directories-inside-vols.t | 31 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-store.c | 18 |
2 files changed, 49 insertions, 0 deletions
diff --git a/tests/bugs/glusterd/bug-1318591-skip-non-directories-inside-vols.t b/tests/bugs/glusterd/bug-1318591-skip-non-directories-inside-vols.t new file mode 100644 index 00000000000..c776b489957 --- /dev/null +++ b/tests/bugs/glusterd/bug-1318591-skip-non-directories-inside-vols.t @@ -0,0 +1,31 @@ +#!/bin/bash + +. $(dirname $0)/../../include.rc +. $(dirname $0)/../../volume.rc +. $(dirname $0)/../../env.rc +. $(dirname $0)/../../snapshot.rc + +cleanup; + +TEST verify_lvm_version +TEST glusterd +TEST pidof glusterd + +TEST setup_lvm 1 + +TEST $CLI volume create $V0 $H0:$L1 +TEST $CLI volume start $V0 + +TEST $CLI volume status $V0; + +TEST touch $GLUSTERD_WORKDIR/vols/file + +TEST $CLI snapshot create snap1 $V0 no-timestamp + +TEST touch $GLUSTERD_WORKDIR/snaps/snap1/file + +TEST killall_gluster + +TEST glusterd + +cleanup; diff --git a/xlators/mgmt/glusterd/src/glusterd-store.c b/xlators/mgmt/glusterd/src/glusterd-store.c index deaa0892afe..ba02bfac12d 100644 --- a/xlators/mgmt/glusterd/src/glusterd-store.c +++ b/xlators/mgmt/glusterd/src/glusterd-store.c @@ -3115,6 +3115,8 @@ glusterd_store_retrieve_volumes (xlator_t *this, glusterd_snap_t *snap) struct dirent *entry = NULL; struct dirent scratch[2] = {{0,},}; glusterd_volinfo_t *volinfo = NULL; + struct stat st = {0,}; + char entry_path[PATH_MAX] = {0,}; GF_ASSERT (this); priv = this->private; @@ -3143,6 +3145,22 @@ glusterd_store_retrieve_volumes (xlator_t *this, glusterd_snap_t *snap) (!strcmp (entry->d_name, "info")))) goto next; + snprintf (entry_path, PATH_MAX, "%s/%s", path, entry->d_name); + ret = sys_lstat (entry_path, &st); + if (ret == -1) { + gf_msg (this->name, GF_LOG_ERROR, 0, + GD_MSG_INVALID_ENTRY, + "Failed to stat entry %s : %s", path, + strerror (errno)); + goto next; + } + + if (!S_ISDIR (st.st_mode)) { + gf_msg_debug (this->name, 0, "%s is not a vaild volume" + , entry->d_name); + goto next; + } + volinfo = glusterd_store_retrieve_volume (entry->d_name, snap); if (!volinfo) { gf_msg (this->name, GF_LOG_ERROR, 0, |