diff options
| author | Avra Sengupta <asengupt@redhat.com> | 2013-06-13 19:38:57 +0530 | 
|---|---|---|
| committer | Vijay Bellur <vbellur@redhat.com> | 2013-07-15 01:23:01 -0700 | 
| commit | 51ed78005c676addef0d0a70ca47c794a6396075 (patch) | |
| tree | e48b463c996cc7cc13995f62860d28c4d45bbaf2 | |
| parent | a2a01c565328e57b05a2e4700f402c351adc9372 (diff) | |
cluster/dht: node-uuid for directories winds to all subvolumes
this works similar to pathinfo now except that the request is sent
to all subvolumes of dht. Underlying replica selects it's subvolume
in a round-robin fashion till one of them returns successfully.
Change-Id: Ie46c5f7090d04d8c2e487b209916ae6791e94624
BUG: 847839
Original Author: Venky Shankar <vshankar@redhat.com>
Signed-off-by: Avra Sengupta <asengupt@redhat.com>
Reviewed-on: http://review.gluster.org/5225
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Amar Tumballi <amarts@redhat.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
| -rw-r--r-- | xlators/cluster/dht/src/dht-common.c | 8 | 
1 files changed, 6 insertions, 2 deletions
diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c index f1bc99be..d622e603 100644 --- a/xlators/cluster/dht/src/dht-common.c +++ b/xlators/cluster/dht/src/dht-common.c @@ -1803,6 +1803,7 @@ dht_vgetxattr_alloc_and_fill (dht_local_t *local, dict_t *xattr, xlator_t *this,                  }                  (void) strcat (local->xattr_val, value); +                (void) strcat (local->xattr_val, " ");                  local->op_ret = 0;          } @@ -1827,6 +1828,8 @@ dht_vgetxattr_fill_and_set (dht_local_t *local, dict_t **dict, xlator_t *this,          if (!*dict)                  goto out; +        local->xattr_val[strlen (local->xattr_val) - 1] = '\0'; +          /* we would need max this many bytes to create xattr string           * extra 40 bytes is just an estimated amount of additional           * space required as we include translator name and some @@ -2179,8 +2182,9 @@ dht_getxattr (call_frame_t *frame, xlator_t *this,           * NOTE: Don't trust inode here, as that may not be valid           *       (until inode_link() happens)           */ -        if (key && (strcmp (key, GF_XATTR_PATHINFO_KEY) == 0) -            && DHT_IS_DIR(layout)) { +        if (key && DHT_IS_DIR(layout) && +            ((strcmp (key, GF_XATTR_PATHINFO_KEY) == 0) +             || (strcmp (key, GF_XATTR_NODE_UUID_KEY) == 0))) {                  (void) strncpy (local->xsel, key, 256);                  cnt = local->call_cnt = layout->cnt;                  for (i = 0; i < cnt; i++) {  | 
