storage/posix: introduce node-uuid-pathinfo
enabling this option has an effect on pathinfo xattr request returning <node-uuid>:<path> instead of the default - which is <hostname>:<path>. Change-Id: Ice1b38abf8e5df1568bab6d79ec0d53dfa520332 BUG: 765380 Signed-off-by: Venky Shankar <vshankar@redhat.com> Reviewed-on: http://review.gluster.org/4567 Reviewed-by: Amar Tumballi <amarts@redhat.com> Reviewed-by: Jeff Darcy <jdarcy@redhat.com> Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Anand Avati <avati@redhat.com>
This commit is contained in:
parent
6a7d28c0f8
commit
24ee79345f
39
tests/bugs/bug-765380.t
Normal file
39
tests/bugs/bug-765380.t
Normal file
@ -0,0 +1,39 @@
|
||||
#!/bin/bash
|
||||
|
||||
. $(dirname $0)/../include.rc
|
||||
|
||||
cleanup;
|
||||
|
||||
TEST glusterd
|
||||
TEST pidof glusterd
|
||||
|
||||
REPLICA=2
|
||||
|
||||
TEST $CLI volume create $V0 replica $REPLICA $H0:$B0/${V0}00 $H0:$B0/${V0}01 $H0:$B0/${V0}10 $H0:$B0/${V0}11
|
||||
TEST $CLI volume start $V0
|
||||
|
||||
## Mount FUSE with caching disabled
|
||||
TEST glusterfs --entry-timeout=0 --attribute-timeout=0 -s $H0 --volfile-id $V0 $M0;
|
||||
|
||||
function count_hostname_or_uuid_from_pathinfo()
|
||||
{
|
||||
pathinfo=`getfattr -m . -n trusted.glusterfs.pathinfo $M0/f00f`
|
||||
echo $pathinfo | grep -o $1 | wc -l
|
||||
}
|
||||
|
||||
touch $M0/f00f
|
||||
|
||||
EXPECT $REPLICA count_hostname_or_uuid_from_pathinfo $H0
|
||||
|
||||
# turn on node-uuid-pathinfo option
|
||||
TEST $CLI volume set $V0 node-uuid-pathinfo on
|
||||
|
||||
# do not expext hostname as part of the pathinfo string
|
||||
EXPECT 0 count_hostname_or_uuid_from_pathinfo $H0
|
||||
|
||||
uuid=`grep UUID /var/lib/glusterd/glusterd.info | cut -f2 -d=`
|
||||
|
||||
# ... but expect the uuid $REPLICA times
|
||||
EXPECT $REPLICA count_hostname_or_uuid_from_pathinfo $uuid
|
||||
|
||||
cleanup;
|
@ -1109,6 +1109,10 @@ struct volopt_map_entry glusterd_volopt_map[] = {
|
||||
.option = "brick-gid",
|
||||
.op_version = 2
|
||||
},
|
||||
{ .key = "storage.node-uuid-pathinfo",
|
||||
.voltype = "storage/posix",
|
||||
.op_version = 2
|
||||
},
|
||||
{ .key = "config.memory-accounting",
|
||||
.voltype = "configuration",
|
||||
.option = "!config",
|
||||
|
@ -2519,8 +2519,13 @@ posix_getxattr (call_frame_t *frame, xlator_t *this,
|
||||
else
|
||||
rpath = real_path;
|
||||
|
||||
(void) snprintf (host_buf, 1024, "<POSIX(%s):%s:%s>",
|
||||
priv->base_path, priv->hostname, rpath);
|
||||
(void) snprintf (host_buf, 1024,
|
||||
"<POSIX(%s):%s:%s>", priv->base_path,
|
||||
((priv->node_uuid_pathinfo
|
||||
&& !uuid_is_null(priv->glusterd_uuid))
|
||||
? uuid_utoa (priv->glusterd_uuid)
|
||||
: priv->hostname),
|
||||
rpath);
|
||||
|
||||
dyn_rpath = gf_strdup (host_buf);
|
||||
if (!dyn_rpath) {
|
||||
@ -4138,6 +4143,16 @@ reconfigure (xlator_t *this, dict_t *options)
|
||||
else
|
||||
posix_aio_off (this);
|
||||
|
||||
GF_OPTION_RECONF ("node-uuid-pathinfo", priv->node_uuid_pathinfo,
|
||||
options, bool, out);
|
||||
|
||||
if (priv->node_uuid_pathinfo &&
|
||||
(uuid_is_null (priv->glusterd_uuid))) {
|
||||
gf_log (this->name, GF_LOG_INFO,
|
||||
"glusterd uuid is NULL, pathinfo xattr would"
|
||||
" fallback to <hostname>:<export>");
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
out:
|
||||
return ret;
|
||||
@ -4499,6 +4514,15 @@ init (xlator_t *this)
|
||||
}
|
||||
}
|
||||
|
||||
GF_OPTION_INIT ("node-uuid-pathinfo",
|
||||
_private->node_uuid_pathinfo, bool, out);
|
||||
if (_private->node_uuid_pathinfo &&
|
||||
(uuid_is_null (_private->glusterd_uuid))) {
|
||||
gf_log (this->name, GF_LOG_INFO,
|
||||
"glusterd uuid is NULL, pathinfo xattr would"
|
||||
" fallback to <hostname>:<export>");
|
||||
}
|
||||
|
||||
pthread_mutex_init (&_private->janitor_lock, NULL);
|
||||
pthread_cond_init (&_private->janitor_cond, NULL);
|
||||
INIT_LIST_HEAD (&_private->janitor_fds);
|
||||
@ -4616,5 +4640,11 @@ struct volume_options options[] = {
|
||||
.validate = GF_OPT_VALIDATE_MIN,
|
||||
.description = "Support for setting gid of brick's owner"
|
||||
},
|
||||
{ .key = {"node-uuid-pathinfo"},
|
||||
.type = GF_OPTION_TYPE_BOOL,
|
||||
.default_value = "off",
|
||||
.description = "return glusterd's node-uuid in pathinfo xattr"
|
||||
" string instead of hostname"
|
||||
},
|
||||
{ .key = {NULL} }
|
||||
};
|
||||
|
@ -124,6 +124,9 @@ struct posix_private {
|
||||
io_context_t ctxp;
|
||||
pthread_t aiothread;
|
||||
#endif
|
||||
|
||||
/* node-uuid in pathinfo xattr */
|
||||
gf_boolean_t node_uuid_pathinfo;
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
|
Loading…
x
Reference in New Issue
Block a user