diff options
| author | Venky Shankar <vshankar@redhat.com> | 2013-02-21 22:10:27 +0530 | 
|---|---|---|
| committer | Anand Avati <avati@redhat.com> | 2013-04-05 14:40:53 -0700 | 
| commit | 24ee79345fc7346ef78b8adf54008ae77524026b (patch) | |
| tree | 55129f2b72e766fba2b7c04d9bcb1b283cf2de05 | |
| parent | 6a7d28c0f8c107baf376eceb9fc05d9e80bf74e5 (diff) | |
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>
| -rw-r--r-- | tests/bugs/bug-765380.t | 39 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-volume-set.c | 4 | ||||
| -rw-r--r-- | xlators/storage/posix/src/posix.c | 34 | ||||
| -rw-r--r-- | xlators/storage/posix/src/posix.h | 3 | 
4 files changed, 78 insertions, 2 deletions
diff --git a/tests/bugs/bug-765380.t b/tests/bugs/bug-765380.t new file mode 100644 index 00000000000..a9784b93d0c --- /dev/null +++ b/tests/bugs/bug-765380.t @@ -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; diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-set.c b/xlators/mgmt/glusterd/src/glusterd-volume-set.c index cc8a2363608..ec02680ab85 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volume-set.c +++ b/xlators/mgmt/glusterd/src/glusterd-volume-set.c @@ -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", diff --git a/xlators/storage/posix/src/posix.c b/xlators/storage/posix/src/posix.c index cd01a1137b0..5e014f8e9e1 100644 --- a/xlators/storage/posix/src/posix.c +++ b/xlators/storage/posix/src/posix.c @@ -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} }  }; diff --git a/xlators/storage/posix/src/posix.h b/xlators/storage/posix/src/posix.h index 696422f64a5..2cee1905f78 100644 --- a/xlators/storage/posix/src/posix.h +++ b/xlators/storage/posix/src/posix.h @@ -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 {  | 
