diff options
author | Pranith Kumar K <pkarampu@redhat.com> | 2015-03-11 17:43:12 +0530 |
---|---|---|
committer | Vijay Bellur <vbellur@redhat.com> | 2015-03-25 11:10:40 -0700 |
commit | 21cd43cfd62f69cd011fced7ebec93b9347f9fce (patch) | |
tree | e3736b832dea4721754623cae8c27b3de49cb220 /xlators/cluster/ec | |
parent | 18dd162e00c8655648cea702bdb7b8bf25f1da97 (diff) |
libxlator: Change marker xattr handling interface
- Changed the implementation of marker xattr handling to take just a
function which populates important data that is different from
default 'gauge' values and subvolumes where the call needs to be
wound.
- Removed duplicate code I found while reading the code and moved it to
cluster_marker_unwind. Removed unused structure members.
- Changed dht/afr/stripe implementations to follow the new implementation
- Implemented marker xattr handling for ec.
Change-Id: Ib0c3626fe31eb7c8aae841eabb694945bf23abd4
BUG: 1200372
Signed-off-by: Pranith Kumar K <pkarampu@redhat.com>
Reviewed-on: http://review.gluster.org/9892
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Xavier Hernandez <xhernandez@datalab.es>
Reviewed-by: Shyamsundar Ranganathan <srangana@redhat.com>
Reviewed-by: Ravishankar N <ravishankar@redhat.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Diffstat (limited to 'xlators/cluster/ec')
-rw-r--r-- | xlators/cluster/ec/src/ec.c | 23 | ||||
-rw-r--r-- | xlators/cluster/ec/src/ec.h | 2 |
2 files changed, 25 insertions, 0 deletions
diff --git a/xlators/cluster/ec/src/ec.c b/xlators/cluster/ec/src/ec.c index 9fecde4c495..9b8251a5403 100644 --- a/xlators/cluster/ec/src/ec.c +++ b/xlators/cluster/ec/src/ec.c @@ -576,16 +576,39 @@ int32_t ec_gf_fsyncdir(call_frame_t * frame, xlator_t * this, fd_t * fd, return 0; } +int +ec_marker_populate_args (call_frame_t *frame, int type, int *gauge, + xlator_t **subvols) +{ + xlator_t *this = frame->this; + ec_t *ec = this->private; + + memcpy (subvols, ec->xl_list, sizeof (*subvols) * ec->nodes); + + if (type == MARKER_XTIME_TYPE) { + /*Don't error out on ENOENT/ENOTCONN */ + gauge[MCNT_NOTFOUND] = 0; + gauge[MCNT_ENOTCONN] = 0; + } + + return ec->nodes; +} + int32_t ec_gf_getxattr (call_frame_t *frame, xlator_t *this, loc_t *loc, const char *name, dict_t *xdata) { int error = 0; + ec_t *ec = this->private; if (name && strcmp (name, EC_XATTR_HEAL) != 0) { EC_INTERNAL_XATTR_OR_GOTO(name, NULL, error, out); } + if (cluster_handle_marker_getxattr (frame, loc, name, ec->vol_uuid, + NULL, ec_marker_populate_args) == 0) + return 0; + ec_getxattr (frame, this, -1, EC_MINIMUM_MIN, default_getxattr_cbk, NULL, loc, name, xdata); diff --git a/xlators/cluster/ec/src/ec.h b/xlators/cluster/ec/src/ec.h index 1c740187757..d565bf8fcb4 100644 --- a/xlators/cluster/ec/src/ec.h +++ b/xlators/cluster/ec/src/ec.h @@ -14,6 +14,7 @@ #include "xlator.h" #include "timer.h" #include "ec-heald.h" +#include "libxlator.h" #define EC_XATTR_PREFIX "trusted.ec." #define EC_XATTR_CONFIG EC_XATTR_PREFIX"config" @@ -45,5 +46,6 @@ struct _ec struct mem_pool * cbk_pool; struct mem_pool * lock_pool; ec_self_heald_t shd; + char vol_uuid[UUID_SIZE + 1]; }; #endif /* __EC_H__ */ |