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:
Venky Shankar 2013-02-21 22:10:27 +05:30 committed by Anand Avati
parent 6a7d28c0f8
commit 24ee79345f
4 changed files with 78 additions and 2 deletions

39
tests/bugs/bug-765380.t Normal file
View 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;

View File

@ -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",

View File

@ -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} }
};

View File

@ -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 {