diff options
Diffstat (limited to 'xlators/features/protect/src/prot_dht.c')
-rw-r--r-- | xlators/features/protect/src/prot_dht.c | 163 |
1 files changed, 0 insertions, 163 deletions
diff --git a/xlators/features/protect/src/prot_dht.c b/xlators/features/protect/src/prot_dht.c deleted file mode 100644 index 1fc8cc1ffde..00000000000 --- a/xlators/features/protect/src/prot_dht.c +++ /dev/null @@ -1,163 +0,0 @@ -/* - Copyright (c) 2013 Red Hat, Inc. <http://www.redhat.com> - This file is part of GlusterFS. - - This file is licensed to you under your choice of the GNU Lesser - General Public License, version 3 or any later version (LGPLv3 or - later), or the GNU General Public License, version 2 (GPLv2), in all - cases as published by the Free Software Foundation. -*/ -#include "xlator.h" -#include "defaults.h" - -enum gf_pdht_mem_types_ { - gf_pdht_mt_coord_t = gf_common_mt_end + 1, - gf_pdht_mt_end -}; - -typedef struct { - pthread_mutex_t lock; - uint16_t refs; - int32_t op_ret; - int32_t op_errno; - dict_t *xdata; -} pdht_coord_t; - -static char PROTECT_KEY[] = "trusted.glusterfs.protect"; - -void -pdht_unref_and_unlock (call_frame_t *frame, xlator_t *this, - pdht_coord_t *coord) -{ - gf_boolean_t should_unwind; - - should_unwind = (--(coord->refs) == 0); - pthread_mutex_unlock(&coord->lock); - - if (should_unwind) { - STACK_UNWIND_STRICT (setxattr, frame, - coord->op_ret, coord->op_errno, - coord->xdata); - if (coord->xdata) { - dict_unref(coord->xdata); - } - GF_FREE(coord); - } -} - -int32_t -pdht_recurse_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, dict_t *xdata) -{ - pdht_coord_t *coord = cookie; - - pthread_mutex_lock(&coord->lock); - if (op_ret) { - coord->op_ret = op_ret; - coord->op_errno = op_errno; - } - if (xdata) { - if (coord->xdata) { - dict_unref(coord->xdata); - } - coord->xdata = dict_ref(xdata); - } - pdht_unref_and_unlock(frame,this,coord); - - return 0; -} - -void -pdht_recurse (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict, - int32_t flags, dict_t *xdata, xlator_t *xl, pdht_coord_t *coord) -{ - xlator_list_t *iter; - - if (!strcmp(xl->type,"features/prot_client")) { - pthread_mutex_lock(&coord->lock); - ++(coord->refs); - pthread_mutex_unlock(&coord->lock); - STACK_WIND_COOKIE (frame, pdht_recurse_cbk, coord, xl, - xl->fops->setxattr, loc, dict, flags, xdata); - } - - else for (iter = xl->children; iter; iter = iter->next) { - pdht_recurse (frame, this, loc, dict, flags, xdata, - iter->xlator, coord); - } -} - -int32_t -pdht_setxattr (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict, - int32_t flags, dict_t *xdata) -{ - pdht_coord_t *coord; - - if (!dict_get(dict,PROTECT_KEY)) { - goto simple_wind; - } - - if (dict->count > 1) { - gf_log (this->name, GF_LOG_WARNING, - "attempted to mix %s with other keys", PROTECT_KEY); - goto simple_wind; - } - - coord = GF_CALLOC(1,sizeof(*coord),gf_pdht_mt_coord_t); - if (!coord) { - gf_log (this->name, GF_LOG_WARNING, "allocation failed"); - goto simple_wind; - } - - pthread_mutex_init(&coord->lock,NULL); - coord->refs = 1; - coord->op_ret = 0; - coord->xdata = NULL; - - pdht_recurse(frame,this,loc,dict,flags,xdata,this,coord); - pthread_mutex_lock(&coord->lock); - pdht_unref_and_unlock(frame,this,coord); - - return 0; - -simple_wind: - STACK_WIND_TAIL (frame, - FIRST_CHILD(this), FIRST_CHILD(this)->fops->setxattr, - loc, dict, flags, xdata); - return 0; -} - -int32_t -init (xlator_t *this) -{ - if (!this->children || this->children->next) { - gf_log (this->name, GF_LOG_ERROR, - "translator not configured with exactly one child"); - return -1; - } - - if (!this->parents) { - gf_log (this->name, GF_LOG_WARNING, - "dangling volume. check volfile "); - } - - return 0; -} - - -void -fini (xlator_t *this) -{ - return; -} - -struct xlator_fops fops = { - .setxattr = pdht_setxattr, -}; - -struct xlator_cbks cbks = { -}; - -struct volume_options options[] = { - { .key = {NULL} }, -}; |